<p>json只对字符串、浮点、整数、javascript对象(python dict)和列表进行编码。在</p>
<p>您必须创建一个函数来将返回的字典转换为一个类,然后使用<code>object_hook</code>关键字参数和json字符串将其传递给<code>json.loads</code>。下面是一些代码来充实它:</p>
<pre><code>import json
class Subscriber(object):
firstname = None
lastname = None
class Post(object):
author = None
title = None
def decode_from_dict(cls,vals):
obj = cls()
for key, val in vals.items():
setattr(obj, key, val)
return obj
SERIALIZABLE_CLASSES = {'Subscriber': Subscriber,
'Post': Post}
def decode_object(d):
for field in d:
if field in SERIALIZABLE_CLASSES:
cls = SERIALIZABLE_CLASSES[field]
return decode_from_dict(cls, d[field])
return d
results = '''[{"Subscriber": {"firstname": "Neal", "lastname": "Walters"}},
{"Post": {"author": {"Subscriber": {"firstname": "Neal",
"lastname": "Walters"}}},
"title": "Decoding JSON Objects"}]'''
result = json.loads(results, object_hook=decode_object)
print result
print result[1].author
</code></pre>
<p>这将处理任何可以实例化而不需要构造函数参数的类,<code>setattr</code>将为其工作的类。在</p>
<p>另外,这使用<code>json</code>。我对<code>simplejson</code>没有经验,所以YMMV,但我听说他们是一样的。在</p>
<p>请注意,尽管两个订阅服务器对象的值相同,但结果对象却不同。这可以通过记忆<code>decode_from_dict</code>类来解决。在</p>