Penghuraian data JSON dalam Python
Soalan:
Cara menukar data JSON kepada Python objek?
Latar Belakang:
Anda menerima objek data JSON daripada API Facebook dan ingin menyimpannya dalam pangkalan data. Pandangan Django yang anda sedang gunakan diwakili oleh kod berikut:
response = request.POST user = FbApiUser(user_id = response['id']) user.name = response['name'] user.username = response['username'] user.save()
Ini berfungsi dengan baik, tetapi anda ingin tahu cara mengendalikan objek data JSON yang kompleks. Anda harap ada cara untuk menukar objek JSON itu menjadi objek Python untuk kegunaan yang lebih mudah.
Penyelesaian:
Dalam Python 3 anda boleh melakukannya dengan mudah menggunakan SimpleNamespace dan 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)
Dalam Python 2, anda boleh menggunakan namedtuple dan object_hook (tetapi kaedah ini sangat perlahan untuk sejumlah besar objek bersarang):
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
Untuk menggunakan semula fungsi ini dengan mudah, anda boleh menggunakan kod berikut:
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)
Atas ialah kandungan terperinci Bagaimana untuk Menukar Data JSON kepada Objek Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!