对于自定义对象,我可以使用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并附加到逗号分隔的列表中?我觉得这里应该有一些直截了当的东西。
答案 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])
可能会有所帮助