我正在尝试编写一个使用 json 对象进行通信的程序,并且在使用自定义类时遇到了麻烦。基本上,我传递给 json.dumps 的对象是一个大字典,主要使用基本类(字符串、列表和其他字典),但在某些情况下,我必须将字符串映射到自定义类 A 的对象。
当我使用这些对象时,我会收到如下消息:
TypeError: <module.A object at 0x01659110> is not JSON serializable
我想做的是为 A 类型的对象编写一个默认的编码方法。对象非常简单,只包含一个标签(str 类型)和一些不同的整数。标签足以唯一标识A,所以如果json单独使用标签,那很好。
在网上阅读了许多类似的问题后,我最终得到:
class AEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, A):
return o.label
else:
return super(AEncoder, self).default(o)
问题是,我从所有人那里得到的消息来源包括一个电话,例如:
AEncoder().encode(object)
这需要在将对象传递到 json.dumps() 之前调用,但我没有事先访问该对象。它藏在前面提到的大字典中,有时我无法访问。我也尝试过实现 A 的__repr__
功能,但我得到了同样的错误。
所以......尝试一个总结版本:json.dumps()
当我无权访问传递到的特定对象时,我如何判断如何处理自定义类json.dumps()
?
如果需要任何澄清,请告诉我。