+-

我想以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可序列化的
有人可以指出我正确的方向吗?
提前致谢
马尔科
最佳答案
你可以使用 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 object > is not JSON serializable
> Django: Converting an entire set of a Model’s objects into a single dictionary
点击查看更多相关文章
转载注明原文:python – Django:自定义对象json序列化 - 乐贴网