小能豆

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

javascript

我想将 JSON 数据转换为 Python 对象。

我从 Facebook API 收到 JSON 数据对象,我想将其存储在我的数据库中。

我当前在 Django (Python) 中的视图(request.POST包含 JSON):

response = request.POST
user = FbApiUser(user_id = response['id'])
user.name = response['name']
user.username = response['username']
user.save()
  • 这工作正常,但是我如何处理复杂的 JSON 数据对象?
  • 如果我能以某种方式将这个 JSON 对象转换为 Python 对象以方便使用,那不是更好吗?

阅读 61

收藏
2024-07-30

共1个答案

小能豆

使用 Python3,您可以在一行中使用SimpleNamespace和来完成此操作object_hook

import json
from types import SimpleNamespace

data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}'

# Parse JSON into an object with attributes corresponding to dict keys.
x = json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
print(x.name, x.hometown.name, x.hometown.id)

旧答案(Python2)

namedtuple在 Python2 中,你可以使用and在一行中完成此操作object_hook(但如果嵌套对象很多,速度会非常慢):

import json
from collections import namedtuple

data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}'

# Parse JSON into an object with attributes corresponding to dict keys.
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)

如果您希望它处理不是好的属性名称的键,请检查namedtuplerename参数

2024-07-30