繁体   English   中英

使用Python将对象列表添加到JSON

[英]List of objects to JSON with Python

我在将Object实例转换为JSON时遇到问题:

ob = Object()

list_name = scaping_myObj(base_url, u, number_page)

for ob in list_name:
   json_string = json.dumps(ob.__dict__)
   print json_string

list_name我有一个Object实例列表。

json_string返回,例如:

{"city": "rouen", "name": "1, 2, 3 Soleil"}
{"city": "rouen", "name": "Maman, les p'tits bateaux"}

但是我想在列表中包含所有信息的1个JSON字符串:

[{"city": "rouen", "name": "1, 2, 3 Soleil"}, {"city": "rouen", "name": "Maman, les p'tits bateaux"}]

您可以使用列表推导来生成字典列表,然后将其转换为:

json_string = json.dumps([ob.__dict__ for ob in list_name])

或使用default功能; json.dumps()将调用它无法序列化的任何内容:

def obj_dict(obj):
    return obj.__dict__

json_string = json.dumps(list_name, default=obj_dict)

后者适用于在结构的任何级别插入的对象,而不仅仅是在列表中。

这个问题的另一个可能的解决方案是jsonpickle ,它可以用来将任何Python对象转换为JSON(不仅仅是简单的列表)。

来自jsonpickle主页:

jsonpickle是一个Python库,用于将复杂Python对象与JSON进行序列化和反序列化。 用于将Python编码为JSON的标准Python库,例如stdlib的json,simplejson和demjson,只能处理具有直接JSON等效的Python原语(例如dicts,lists,strings,int等)。 jsonpickle构建在这些库之上,允许将更复杂的数据结构序列化为JSON。 jsonpickle具有高度可配置性和可扩展性,允许用户选择JSON后端并添加额外的后端。

执行转换很简单:

import jsonpickle

class JsonTransformer(object):
    def transform(self, myObject):
        return jsonpickle.encode(myObject, unpicklable=False)

与@MartijnPieters的答案类似,如果您不想创建单独的函数,可以将json.dumps default参数与lambda一起使用: json.dumps(obj, default = lambda x: x.__dict__)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM