将列表序列化为 JSON

Posted

技术标签:

【中文标题】将列表序列化为 JSON【英文标题】:Serializing list to JSON 【发布时间】:2011-01-10 00:01:23 【问题描述】:

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

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

这似乎只能用于 Django 对象。如何序列化简单的 Python 对象?

【问题讨论】:

您能否包含您实际使用的产生此错误的实际代码的 sn-p? 【参考方案1】:

你可以用纯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.6的新模块,不用simplejson了。非常感谢:-) 我根本无法解析转储的 JSON 文件,因为在这个文件中,JSON_ARRAY 是另一个 JSON_ARRAY 的直接子代。 如何恢复列表?【参考方案2】:

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

try:
    import json
except ImportError:
    import simplejson as json

【讨论】:

【参考方案3】:

是的,但是你如何处理 django 对象呢?简单的 json 往往会让他们窒息。

如果对象是单个模型对象(例如,不是查询集),我偶尔会存储模型对象类型和 pk,如下所示:

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

要反序列化,您可以重建使用 model.objects.get() 引用的对象。如果您对存储 dict 的类型的对象详细信息感兴趣,这将无济于事,但如果您只需要知道涉及哪个对象,它就会很有效。

【讨论】:

以上是关于将列表序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Jackson 将列表序列化为 xml 和 json

使用 datagridview 将列表序列化为现有的 .Json 文件

将 json 反序列化为匿名类型列表

将json反序列化为键值对列表[重复]

无法将 python 列表序列化为 json

将特定 JSON 字段反序列化为 Unity 中的对象列表