Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON编码自定义类不调用重写的默认值_Json_Python 2.7 - Fatal编程技术网

JSON编码自定义类不调用重写的默认值

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

我有一个基于json.JSONEncoder的类定义,我在其中重写了默认方法。现在,当我在该类的实例上调用json.dumps时,默认方法没有被调用?我错过了什么吗

在我的示例代码中,我不希望它神奇地生成序列化对象,但我希望执行
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
继承,并调用override
default
方法。但事实并非如此

我现在已经在它自己的类中创建了逻辑来编码我自己的类/类型,当我调用
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)
它识别并处理我的类,或者将编码传递给默认编码器