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
Libérer: 2024-11-10 01:10:02
original
248 Les gens l'ont consulté

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()
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal