在Django中:如何将字典对象序列化为JSON?

4

我有一个非常基础的问题,

>>> 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'
>>> 

这怎么做呢?

请看一下我的回答。 - andilabs
3个回答

14

此外,由于您似乎正在使用Python 2.6,因此您可以直接使用json模块:

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

5
Django系列化器是用于Django模型对象和QuerySets的。这就是为什么它正在查找_meta字段。 - JCotton
而本地序列化程序无法完成任务:TypeError:<Account:9de5-2653-000d-81a3 => foo@bar.net>不可JSON序列化。 - Ted Dunning

6
from django.utils import simplejson
data = simplejson.dumps({'a': 1})

这在Python对象上运行得很好,但在Django查询集上效果不佳。 - Ted Dunning
@Ted:当然不是。要序列化查询集,请按照问题所示的方法操作。 - Ignacio Vazquez-Abrams
看起来Django的开发人员决定坚持使用内置的json模块。截至2013年底,simplejson已被弃用,应该使用json进行替换。https://github.com/pythonforfacebook/facebook-sdk/issues/106 - Austin A

0

jsonsimplejson 这样的库并不适合用于序列化 Django 对象,当您可以在视图中使用来自 django.core 的序列化器时:

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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接