Analyse des données JSON en Python
Question :
Comment convertir des données JSON en Python des objets ?
Contexte :
Vous recevez un objet de données JSON de l'API Facebook et souhaitez le stocker dans une base de données. La vue Django que vous utilisez actuellement est représentée par le code suivant :
response = request.POST user = FbApiUser(user_id = response['id']) user.name = response['name'] user.username = response['username'] user.save()
Cela fonctionne bien, mais vous voulez savoir comment gérer des objets de données JSON complexes. Vous souhaiteriez qu'il existe un moyen de convertir cet objet JSON en un objet Python pour une utilisation plus facile.
Solution :
Dans Python 3, vous pouvez facilement le faire en utilisant SimpleNamespace et object_hook :
import json from types import SimpleNamespace data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}' # 将JSON解析为带有对应于dict键的属性的对象。 x = json.loads(data, object_hook=lambda d: SimpleNamespace(**d)) print(x.name, x.hometown.name, x.hometown.id)
Dans Python 2, vous pouvez utiliser approvedtuple et object_hook (mais cette méthode est très lente pour un grand nombre d'objets imbriqués) :
import json from collections import namedtuple data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}' # 将JSON解析为带有对应于dict键的属性的对象。 x = json.loads(data, object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) print x.name, x.hometown.name, x.hometown.id
Pour réutiliser facilement cette fonction, vous pouvez utiliser le code suivant :
def _json_object_hook(d): return namedtuple('X', d.keys())(*d.values()) def json2obj(data): return json.loads(data, object_hook=_json_object_hook) x = json2obj(data)
Si vous souhaitez qu'il gère les clés qui ne sont pas des noms de propriété valides, regardez le paramètre rename denamedtuple.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!