Bagaimana untuk Menukar Data JSON kepada Objek Python?

Linda Hamilton
Lepaskan: 2024-11-10 01:10:02
asal
202 orang telah melayarinya

How to Convert JSON Data to Python Objects?

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()
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan