【问题标题】:Django Model is not JSON serializableDjango 模型不是 JSON 可序列化的
【发布时间】:2019-12-27 01:41:23
【问题描述】:

我正在尝试以 JSON 格式返回 Django 模型的字典。

我尝试过序列化程序、model_to_dict、json.dump,但似乎无法正常工作。

代码的小sn-p:

    def get_queryset(self):
        queryset = (Venue.objects.all())
        location = self.request.query_params.get('location', None)
        latitude = location.split('S')[0]
        longitude = location.split('S')[1]
        venue_gaps = {}
        for venue in queryset.iterator():
            locationArray = [y.strip() for y in venue.postcode.split(',')]
            distance = gmaps.distance_matrix([str(latitude) + " " + str(longitude)], [str(locationArray[0]) + " " + str(locationArray[1])], mode='driving')['rows'][0]['elements'][0]
            m = distance["distance"]["value"]
            venue_gaps[m] = venue
        sorted_venues = dict(sorted(venue_gaps.items()))
        return JsonResponse(json.dumps(sorted_venues))

我创建的字典是 {int:object, int:object, int:object, ....}

我希望将其作为响应返回。我不断收到诸如“TypeError: Object of type object is not JSON serializable”之类的问题

【问题讨论】:

  • 字典是 test_dict,我在第二行初始化它。这是我的第一个 python/django 项目,所以我对此很陌生。感谢观看

标签: python json django python-3.x


【解决方案1】:

我认为更简单的问题:

 return JsonResponse(json.dumps(sorted_venues))

是多余的,这应该可以:

return JsonResponse(sorted_venues)

【讨论】:

    【解决方案2】:

    使用django.core.serializers:

    from django.core import serializers
    
    qs = YourModel.objects.filter(foo='bar')
    serialized_qs = serializers.serialize('json', qs)
    
    print(serialized_qs)
    

    文档:https://docs.djangoproject.com/en/2.2/topics/serialization/

    【讨论】:

    • 我试过这个,但它返回一个 json 字符串中的对象。我需要先将对象排序到字典中,然后将其序列化。如何序列化 {int:Oject} 的用词
    • 调用obj.__dict__或使用django rest框架序列化器:django-rest-framework.org/api-guide/serializers
    • 当我在将 x.__dict__ 添加到字典时调用 x.__dict__ 时出现错误“TypeError:ModelState 类型的对象不是 JSON 可序列化的”。我是在正确的地方做的吗?
    • 在模型实例上调用它,例如obj = YourModel.objects.get(id=123)
    • 我已经用完整的功能更新了我的代码 sn-p。我已经尝试过您的建议,但也许我没有正确执行。抱歉,这是我的第一个 Django 项目!
    猜你喜欢
    • 2021-11-27
    • 2010-11-30
    • 2014-10-02
    • 2017-06-18
    • 2013-04-29
    • 1970-01-01
    • 2020-03-04
    • 2018-09-12
    • 2013-05-23
    相关资源
    最近更新 更多