繁体   English   中英

在 json 对象中序列化自定义对象

[英]Serialize a custom object inside json object

我正在使用第三方 python 库,它返回其中的列表和字典中的一些数据(JSON 格式)。 例如,这是一个示例条目:

data = [{'a': 1, 'b': 80, 'c': 42, 'd': [{'r': 0, 's': '1', 'u': 5}], 'id': 10, 'k': 60, 'v': 0, 'm': 
{'ty': 'djp', 'nr': '10', 'bc': Adder('179'), 'in': 3}}, {'a': 1, 'b': 70, 'c': 42, 'd': [{'r': 0, 's': 
'1', 'u': 5}], 'y': 10, 'k': 60, 'v': 0, 'm': {'ty': 'djp', 'dx': '10', 'tx': Adder('179'), 'in': 3}}]

我的问题是“Adder”类是一个对象。 其他一切都只是字符串。

所以,当我这样做时:

json.dumps(data)

它会导致错误消息:

Adder('179') 不是 JSON 可序列化的。

我不关心序列化这个 Adder 类,所以如果可能的话,我想以某种方式使它成为一个字符串,例如“Adder(179)”。 是否可以使转储功能起作用? Class Adder不是我自己的,也许我可以将其序列化或通过编辑源代码或其他方式告诉它如何处理它? 任何简单的方法都可以。

只需指定一个自定义编码器类

class RobustEncoder(json.JSONEncoder):
    def default(self, o):
        try:
            return super(RobustEncoder, self).default(o)
        except TypeError:
            return str(o)    

json.dumps(data, cls=RobustEncoder)

关键字参数cls记录在json.dump的文档中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM