Django:自定义对象 json 序列化
Posted
技术标签:
【中文标题】Django:自定义对象 json 序列化【英文标题】:Django: custom object json serialization 【发布时间】:2014-05-19 23:39:56 【问题描述】:我想以 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>] is not JSON serializable
有人能指点我正确的方向吗?
提前致谢 马可
【问题讨论】:
【参考方案1】:你可以使用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()
):
【讨论】:
以上是关于Django:自定义对象 json 序列化的主要内容,如果未能解决你的问题,请参考以下文章