簡體   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