python - 如何将自定义对象序列化为 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
解决方案
推荐阅读
- python - 如何从python导入弧度文件,我必须如何打印出一个大数字
- javascript - 使用 pdf.js 时无法读取未定义的属性“GlobalWorkerOptions”
- typescript - 如何通过动态导入和 webpack 块在整个 Typescript 项目中使用类型?
- azure - 我可以更改 Azure 中哪些资源的名称并且不会破坏任何内容?
- memory-management - 使用 rapidXML 解析多个文件(一个一个)以使用更少的内存
- soap - 使用不同的输入多次运行 SoapUI 请求
- ios - 如何从 SceneKit 中的 .dae 文件访问文本元素?
- r - 如何为r中的每三列添加相同的列名?
- c# - 如何通过存储在变量中的名称调用字符串资源?
- python - 查找点是否包含在两条曲线之间