【发布时间】:2018-08-18 22:31:00
【问题描述】:
我定义了一个类A,并且在其他类、容器和嵌套类型中使用A 的对象。
例子
a = A()
b = [a,3,'hello'
c = {'hey': b, 'huy': 3}
d = [a,b,c]
我对@987654325@的json表示很感兴趣,所以我当然要指定遇到A的实例时如何表现。
对于 'A' 类的对象,我想得到这个(注意我跳过了 att2,这表明我不使用 a.__dict__ 之类的东西):
{
class_name = 'A',
att1 = '<value of att1>',
att3 = '<value of att3>'
}
att1 可以是任何东西:A 实例、默认类型等。
我希望能够调用 json.dumps(d) 并获得所需的输出,所以我想做的是告诉 A 类在 json 序列化程序询问时要输出什么。
我环顾四周,只发现了复杂的解决方案,其中将 lambda 或类传递给 json.dumps(),但我不明白为什么不直接覆盖由 json 序列化程序调用的方法,例如覆盖 @987654333 时@ 或__repr__()。
也许这是不可能的?
在这种情况下,我的情况可能是一个简单的解决方案?请注意,在我的实际问题中,我不仅有 A 类,还有嵌套在一起的各种自定义类,因此覆盖默认序列化程序将是自然且更简单的解决方案。
我的一个尝试
我正在尝试遵循encoder.py第160行的建议
所以从json.JSONEncoder 继承A 并且我声明了方法
def default(self,obj):
return 'valid custom json representation of A'
但这不起作用,并且引发了上述链接第 179 行的异常。我的代码有什么问题?
【问题讨论】:
标签: python json jsonserializer