如何将 JSON 数据转换为 Python 对象?

Linda Hamilton
发布: 2024-11-10 01:10:02
原创
217 人浏览过

How to Convert JSON Data to Python Objects?

Python中的JSON数据解析

问题:

如何将JSON数据转换为Python对象?

背景:

您从Facebook API接收JSON数据对象,并希望将其存储在数据库中。您当前正在使用的Django视图以以下代码表示:

response = request.POST
user = FbApiUser(user_id = response['id'])
user.name = response['name']
user.username = response['username']
user.save()
登录后复制

这可以正常工作,但您想知道如何处理复杂JSON数据对象。您希望有一种方法将该JSON对象转换为Python对象以简化使用。

解决方案:

在Python 3中,您可以使用SimpleNamespace和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)
登录后复制

在Python 2中,可以使用namedtuple和object_hook(但对于大量嵌套对象,此方法非常慢):

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
登录后复制

要轻松重用此功能,可以使用以下代码:

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)
登录后复制

如果您希望它处理不是有效属性名称的键,请查看namedtuple的rename参数。

以上是如何将 JSON 数据转换为 Python 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板