Home >Backend Development >Python Tutorial >How to Convert JSON Data to Python Objects?

How to Convert JSON Data to Python Objects?

Linda Hamilton
Linda HamiltonOriginal
2024-11-10 01:10:02253browse

How to Convert JSON Data to Python Objects?

JSON data parsing in Python

Question:

How to convert JSON data to Python objects?

Background:

You receive a JSON data object from the Facebook API and want to store it in a database. The Django view you are currently using is represented by the following code:

response = request.POST
user = FbApiUser(user_id = response['id'])
user.name = response['name']
user.username = response['username']
user.save()

This works fine, but you want to know how to handle complex JSON data objects. You wish there was a way to convert that JSON object into a Python object for easier use.

Solution:

In Python 3 you can easily do this using SimpleNamespace and 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)

In Python 2 , you can use namedtuple and object_hook (but this method is very slow for large number of nested objects):

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

To easily reuse this function, you can use the following code:

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)

If You want it to handle keys that are not valid property names, look at the rename parameter of namedtuple.

The above is the detailed content of How to Convert JSON Data to Python Objects?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn