Django:自定义对象 JSON 序列化

3 投票
1 回答
2719 浏览
提问于 2025-04-18 01:44

我想把一个自定义对象转换成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()):

撰写回答