首页 > 解决方案 > 如何将自定义对象序列化为 JSON?

问题描述

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

标签: pythonjsonpython-3.x

解决方案


推荐阅读