【发布时间】:2011-11-16 13:01:48
【问题描述】:
我需要知道如何将动态 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 上的子对象。
【问题讨论】:
-
除了动态元素——我不知道在对象被序列化成json之前可能会添加什么属性。
-
您也会注意到重复作品的解决方案。
-
@phihag:感谢您指出这一点。它帮助我意识到我的问题比我想象的要多(请参阅更新的问题)。
-
那么你可能应该问一个新问题。特别注意不要包含无效的示例代码。例如,您想要
class C(object): pass。我添加了一个应该可以解决您的问题的答案。 -
糟糕,对不起,我完全错了。
class C(): pass当然是有效,但它在 Python 2.x 中创建了一个旧式类(就像class C: pass一样)。老式的类是奇怪的野兽。通过从object继承,您可以获得更理智的新风格行为。