将动态python对象转换为json

时间:2011-09-13 21:18:40

标签: python json

  

可能重复:
  Python serializable objects 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上包含子对象。

4 个答案:

答案 0 :(得分:115)

指定default=参数doc

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

答案 1 :(得分:17)

json.dumps(c.__dict__)

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

答案 2 :(得分:8)

尝试使用此程序包python-jsonpickle

  

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

答案 3 :(得分:0)

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