簡體   English   中英

自定義對象列表json在python中序列化

[英]custom object list json serialize in python

對於自定義對象,我可以使用JSONEncoder編碼為json。

class CustomEncoder(JSONEncoder):
    def encode(self, custom):
        prop_dict = {}
        for prop in Custom.all_properties_names():
            if custom.__getattribute__(prop) is not None:
                if prop is 'created_timestamp':
                    prop_dict.update({prop: custom.__getattribute__(
                        prop).isoformat()})
                else:
                    prop_dict.update({prop: custom.__getattribute__(prop)})
        return prop_dict

為了生成json,我正在使用json.dumps(custom, cls=CustomEncoder, indent=True)

現在,我有了Custom類對象的列表。 如何將列表轉換為json?

custom_list = //get custom object list from service

如何將整個列表轉換為json? 我是否需要迭代和捕獲每個自定義對象的json並追加到以逗號分隔的列表中? 我覺得這里應該缺少一些直截了當的東西。

僅在需要時才調用自定義編碼器。 如果您有JSON庫認為可以編碼的自定義內容,例如字符串或字典,則不會調用自定義編碼器。 下面的示例顯示了使用單個自定義編碼器對對象或包含對象的列表進行編碼:

import json

class Custom(object):
    pass

class CustomEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, Custom):
            return 'TASTY'
        return CustomEncoder(self, o)

print json.dumps( Custom(), cls=CustomEncoder )
print json.dumps( [1, [2,'three'], Custom()], cls=CustomEncoder )

輸出:

"TASTY"
[1, [2, "three"], "TASTY"]

以我的方式,我將對象轉換為字典,然后使用字典的json.dumps列表:

def custom_to_dict(custom):
    return {
        'att1': custom.att1,
        'att2': custom.att2,
        ...
    }

#custom_list is your list of customs
out = json.dumps([custom_to_dict(custom) for custom in custom_list])

可能會有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM