将动态Python对象转换为JSON

77 投票
4 回答
103774 浏览
提问于 2025-04-17 02:14

我想知道怎么把一个动态的 Python 对象转换成 JSON 格式。这个对象可以有多个层级的子对象。例如:

class C(): pass
class D(): pass

c = C()
c.dynProperty1 = "something"
c.dynProperty2 = { 1, 3, 5, 7, 9 }
c.d = D()
c.d.dynProperty3 = "d.something"

# ... convert c to json ...

我试过这段代码:

import json
 
class C(): pass
class D(): pass
 
c = C()
c.what = "now?"
c.now = "what?"
c.d = D()
c.d.what = "d.what"
 
json.dumps(c.__dict__)

但是我遇到了一个错误,提示说 TypeError: <__main__.D instance at 0x99237ec> is not JSON serializable

我该怎么做才能让任何子对象(如果它们是类的话)自动使用它们的 __dict__ 来进行序列化呢?

4 个回答

9

试试这个包 python-jsonpickle

这是一个Python库,可以把任何复杂的对象转换成JSON格式。简单来说,它可以把几乎所有的Python对象变成JSON,然后还可以把这些JSON再转换回Python对象。

16
json.dumps(c.__dict__)

这样做会给你一个通用的JSON对象,如果你想要的是这个的话。

144

指定 default= 参数 (文档)

json.dumps(c, default=lambda o: o.__dict__)

撰写回答