将动态 python 对象转换为 json

可能的复制品:
Python 可序列化对象 json

我需要知道如何将动态 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 ...

使用 python 2.6的代码如下:

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

我不知道用户可能在 c中放入什么类型的子对象。有没有一种解决方案足够聪明,能够检测属性是否是一个对象,并自动解析它的 __dict__

更新 以包括 c上的子对象。

101266 次浏览
json.dumps(c.__dict__)

如果您想要的是一个通用的 JSON 对象,那么它将为您提供一个通用的 JSON 对象。

尝试使用这个包 巨蟒 jsonpickle

用于将任意对象图序列化为 JSON 的 Python 库。它可以采用几乎任何 Python 对象并将对象转换为 JSON。此外,它还可以将对象重新构建为 Python。

json.dumps期望字典作为参数。对于实例 c,属性 c.__dict__是将属性名映射到相应对象的字典。

指定 default=参数 (http://docs.python.org/library/json.html # json.dump”rel = “ noReferrer”> doc ):

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