Ich bevorzuge es, eine Überprüfung der Felder hinzuzufügen, z. so können Sie Fehler wie zu fangen, wenn Sie ungültige json bekommen, oder nicht die json Sie erwartet hatten, so habe ich namedtuples:
from collections import namedtuple
payload = namedtuple('payload', ['action', 'method', 'data'])
def deserialize_payload(json):
kwargs = dict([(field, json[field]) for field in payload._fields])
return payload(**kwargs)
dies wird Ihnen schöne Fehler geben lassen, wenn die json Sie Parsen die Sache nicht überein Sie möchten, dass es analysiert
>>> json = {"action":"print","method":"onData","data":"Madan Mohan"}
>>> deserialize_payload(json)
payload(action='print', method='onData', data='Madan Mohan')
>>> badjson = {"error":"404","info":"page not found"}
>>> deserialize_payload(badjson)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in deserialize_payload
KeyError: 'action'
Wenn Sie verschachtelte Beziehungen analysieren möchten, z '{"parent":{"child":{"name":"henry"}}}'
können Sie immer noch die namedtuples verwenden, und sogar eine wiederverwendbare Funktion Sie
Person = namedtuple("Person", ['parent'])
Parent = namedtuple("Parent", ['child'])
Child = namedtuple('Child', ['name'])
def deserialize_json_to_namedtuple(json, namedtuple):
return namedtuple(**dict([(field, json[field]) for field in namedtuple._fields]))
def deserialize_person(json):
json['parent']['child'] = deserialize_json_to_namedtuple(json['parent']['child'], Child)
json['parent'] = deserialize_json_to_namedtuple(json['parent'], Parent)
person = deserialize_json_to_namedtuple(json, Person)
return person
geben
>>> deserialize_person({"parent":{"child":{"name":"henry"}}})
Person(parent=Parent(child=Child(name='henry')))
>>> deserialize_person({"error":"404","info":"page not found"})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in deserialize_person
KeyError: 'parent'
Mögliche doppelte: http://stackoverflow.com/questions/6578986/how-to-convert-json-data-into-a-python-object –