[英]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.