将列表序列化为JSON

58

我正在客户端和Django服务器之间发送信息,并且我想要使用JSON来传输数据。我正在发送简单的信息-字符串列表。我尝试使用django.core.serializers,但是当我这样做时,出现了问题。

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

看起来这只能用于Django对象。那么我该如何序列化简单的Python对象呢?


2
你能否包含一小段实际使用的代码片段,以便我们查看产生了哪个错误? - S.Lott
3个回答

105
您可以使用纯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
我无法解析转储的JSON文件,因为在该文件中,JSON_ARRAY是另一个JSON_ARRAY的直接子级。 - Wei Yang
4
如何将其恢复至列表? - Peter.k

7

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

try:
    import json
except ImportError:
    import simplejson as json

3

是的,但那么你该怎么处理Django对象呢?简单的JSON往往无法处理它们。

如果这些对象是单独的模型对象(不是查询集,例如),我偶尔会存储模型对象类型和主键,如下所示:

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

要进行反序列化,您可以使用model.objects.get()重构引用的对象。如果您有兴趣了解存储在字典中的对象细节,则此方法无法帮助,但是如果您只需要知道所涉及的对象是哪个,则该方法很有效。


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