【问题标题】:In Django : How to serialize dict object to json?在 Django 中:如何将 dict 对象序列化为 json?
【发布时间】:2011-03-01 22:55:00
【问题描述】:

我有这个非常基本的问题,

>>> from django.core import serializers
>>> serializers.serialize("json", {'a':1})
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/django/core/serializers/__init__.py", line 87, in serialize
    s.serialize(queryset, **options)
  File "/usr/lib/pymodules/python2.6/django/core/serializers/base.py", line 40, in serialize
    for field in obj._meta.local_fields:
AttributeError: 'str' object has no attribute '_meta'
>>> 

如何做到这一点?

【问题讨论】:

  • 请看我的回答。

标签: python django json serialization


【解决方案1】:

另外,由于您似乎使用的是 Python 2.6,您可以直接使用 json 模块:

import json
data = json.dumps({'a': 1})

【讨论】:

  • Django 序列化器用于 Django 模型对象和查询集。这就是它寻找 _meta 字段的原因。
  • 而原生序列化程序无法完成这项工作:TypeError: foo@bar.net> is not JSON serializable
【解决方案2】:
from django.utils import simplejson
data = simplejson.dumps({'a': 1})

【讨论】:

  • 这适用于 python 对象,但不适用于 Django 查询集。
  • @Ted:当然不是。要序列化查询集,请执行问题显示的操作。
  • 看起来 Django 家伙决定坚持使用内置的 json 模块。截至 2013 年底,simplejson 已弃用,应替换为 json。 github.com/pythonforfacebook/facebook-sdk/issues/106
【解决方案3】:

当您可以在视图中使用来自django.core 的序列化程序时,像jsonsimplejson 这样的库对于序列化django 对象来说并不是很酷:

from django.core import serializers


def json_for_model_instance(request, pk):       
    instance = YourModel.objects.get(pk=pk)
    serialized_instance = serializers.serialize('json', [instance, ])

    return HttpResponse(serialized_instance, content_type="application/json")

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 2016-08-21
    • 2016-04-12
    • 1970-01-01
    • 2017-10-29
    • 2021-11-24
    • 2019-05-17
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多