Maison >développement back-end >Tutoriel Python >Comment convertir des données JSON en objets Python ?

Comment convertir des données JSON en objets Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-10 01:10:02250parcourir

How to Convert JSON Data to Python Objects?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn