JSON编码自定义类不调用重写的默认值
我有一个基于json.JSONEncoder的类定义,我在其中重写了默认方法。现在,当我在该类的实例上调用json.dumps时,默认方法没有被调用?我错过了什么吗 在我的示例代码中,我不希望它神奇地生成序列化对象,但我希望执行JSON编码自定义类不调用重写的默认值,json,python-2.7,Json,Python 2.7,我有一个基于json.JSONEncoder的类定义,我在其中重写了默认方法。现在,当我在该类的实例上调用json.dumps时,默认方法没有被调用?我错过了什么吗 在我的示例代码中,我不希望它神奇地生成序列化对象,但我希望执行print(“here”) import json class MyClass(json.JSONEncoder): id = "myId" data = "myData" def default(self, o): prin
print(“here”)
import json
class MyClass(json.JSONEncoder):
id = "myId"
data = "myData"
def default(self, o):
print("here")
print ("Create instance")
obj = MyClass()
print("Serialize")
print(json.dumps(obj))
print ("and done")
我是Python新手,如果这是非常明显的事情,我深表歉意。经过进一步的挖掘和追踪,我想我已经找到了原因。问题的一部分,我认为这是我自己对如何使用它的误解 调用
json.dumps
时,如果希望使用自定义编码器,则需要指定该编码器的类别,否则dumps
默认使用jsonecoder
的标准实现
json.dumps(obj, cls=MyEncoder)
我的误解是,通过将类基于json.jsonecoder
的dumps
只会将实例识别为从jsonecoder
继承,并调用overridedefault
方法。但事实并非如此
我现在已经在它自己的类中创建了逻辑来编码我自己的类/类型,当我调用json.dumps
时,我会传入该类名
所以我现在有
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, MyClass):
return {"id": obj.id, "data": obj.data}
return json.JSONEncoder.default(self, obj)
当我想序列化时,我使用
json.dumps(object_to_serialize, cls=MyEncoder)
它识别并处理我的类,或者将编码传递给默认编码器