2010-01-27 88 views
24

我在客户端和Django服务器之间发送信息,并且我想使用JSON来实现此目的。我正在发送简单的信息 - 字符串列表。我试着用django.core.serializers,但是当我这样做,我得到了将列表序列化为JSON

AttributeError: 'str' object has no attribute '_meta' 

看来,这只能为Django的对象使用。我如何序列化简单的Python对象?

+2

您能否包含您实际使用的产生此错误的实际代码片段? – 2010-01-27 14:45:52

回答

46

您可以使用纯Python来做到这一点:

import json 
list = [1, 2, (3, 4)] # Note that the 3rd element is a tuple (3, 4) 
json.dumps(list) # '[1, 2, [3, 4]]' 
+2

哦,它是2.6中的一个新模块,我不必使用simplejson。非常感谢:-) – gruszczy 2010-01-27 14:57:55

+0

我根本无法解析转储的JSON文件,因为在此文件中,JSON_ARRAY是另一个JSON_ARRAY的直接子节点。 – 2014-05-22 18:05:42

4

如果使用Python 2.5,您可能需要导入simplejson

try: 
    import json 
except ImportError: 
    import simplejson as json 
2

是的,但后来你会怎么做对的Django对象?简单的json往往会窒息他们。

如果对象是单个模型对象(不查询集,例如),我偶尔会存储模型对象类型和PK,就像这样:

seralized_dict = simplejson.dumps(my_dict, 
        default=lambda a: "[%s,%s]" % (str(type(a)), a.pk) 
        ) 

反序列化,你可以重建对象引用与model.objects.get()。如果您对dict所存储的类型的对象细节感兴趣,这并没有什么帮助,但是如果您只需要知道哪个对象参与其中,则它是有效的。