python中的自定义对象列表json序列化

时间:2014-05-31 06:00:51

标签: 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并附加到逗号分隔的列表中?我觉得这里应该有一些直截了当的东西。

2 个答案:

答案 0 :(得分:3)

仅在需要时调用自定义编码器。如果你有一个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"]

答案 1 :(得分:1)

以我的方式,我将对象转换为dict然后使用json.dumps dict列表:

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])

可能会有所帮助