Django:自定义对象 JSON 序列化
我想把一个自定义对象转换成json格式,其中entryData是我自己定义的对象的一个列表。大概是这个样子:
{
"total":2,
"current":1,
"entryData":[
{
"id":1,
"version":0,
"name":"Default Station"
},
{
"id":2,
"version":3,
"name":"Default Station 1"
}
]
}
这是我在尝试获取json输出时所做的:
def ground_station_listgrid(request):
entryData = serializers.serialize("json", GroundStation.objects.all())
response_data = {}
response_data['totalPages'] = 2
response_data['currentPage'] = 1
response_data['entryData'] = entryData
return HttpResponse(json.dumps(response_data),mimetype='application/json')
但是结果是entryData被当作字符串处理,里面的引号被转义了:
{
"totalPages": 1,
"currentPage": 1,
"entryData": "[{\"pk\": 1, \"model\": \"satview.groundstation\", ....
我还尝试过这样做:
def ground_station_listgrid(request):
response_data = {}
response_data['totalPages'] = 1
response_data['currentPage'] = 1
response_data['entryData'] = GroundStation.objects.all()
return HttpResponse(json.dumps(response_data),mimetype='application/json')
但我遇到了这个错误:[<GroundStation: nome>, <GroundStation: nome>, <GroundStation: nome>] 不能被转换成JSON
有人能给我指个方向吗?
提前谢谢你,Marco
1 个回答
7
你可以使用 model_to_dict() 这个方法:
def ground_station_listgrid(request):
data = [model_to_dict(instance) for instance in GroundStation.objects.all()]
response_data = {}
response_data['totalPages'] = 1
response_data['currentPage'] = 1
response_data['entryData'] = data
return HttpResponse(json.dumps(response_data),mimetype='application/json')
不过我更喜欢使用 Django 自带的工具: django.core.serializers,但是因为你需要自定义 JSON 响应,所以使用 model_to_dict()
似乎是更合适的选择。
这里还有其他的选择(比如使用 values_list()
):