我有一个python模块,它将生成数千个将用于http调用的类。
必须将这些类转换为JSON对象才能进行调用。
当我尝试一个简单的例子时:
from json import JSONEncoder
import json
class BaseObject:
pass
class MyEncoder(JSONEncoder):
def default(self, o):
if isinstance(o, BaseObject):
return JSONEncoder.default(self, dict(o.__dict__))
class foo(BaseObject):
def __init__(self):
self.bar = bar()
class bar(BaseObject):
pass
MyEncoder().encode(foo())
我收到错误的堆栈:
File "f:\sdks\Python\testA.py", line 27, in <module>
MyEncoder().encode(foo())
File "C:\Users\{user}\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\{user}\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "f:\sdks\Python\testA.py", line 11, in default
return JSONEncoder.default(self, dict(o.__dict__))
File "C:\Users\{user}\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'dict' is not JSON serializable
我认为Python中的每个对象本质上都是dict
,它应该是一个有效的单层JSON对象。但情况似乎并非如此?
主要问题是“dict”不可序列化(在失败输出中明确说明),该文档明确声明dict可序列化为JSON对象https://docs.python.org/3/library/json.html#json.JSONEncoder