如何将自定义对象序列化为JSON?

时间:2018-06-15 00:08:39

标签: python json python-3.x

我有一个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

0 个答案:

没有答案