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 object > is not JSON serializable Django: Converting an entire set of a Model's objects into a single dictionary

【讨论】:

以上是关于Django:自定义对象 json 序列化的主要内容,如果未能解决你的问题,请参考以下文章

django学习之- json序列化

使用JSON.NET实现对象属性的自定义化格式

Django 使用自定义 SQL 而不是模型将 JSON 对象返回到模板

Ktor自定义json对象反序列化

JSON.stringify() - 对象的自定义序列化器

c# 通过json.net中的JsonConverter进行自定义序列化与反序列化