JSONデータをPythonオブジェクトに変換するにはどうすればいいですか?質問する

JSONデータをPythonオブジェクトに変換するにはどうすればいいですか?質問する

JSON データを Python オブジェクトに変換したいです。

Facebook API から JSON データ オブジェクトを受け取り、それをデータベースに保存します。

Django (Python) の現在のビュー ( request.POSTJSON が含まれています):

response = request.POST
user = FbApiUser(user_id = response['id'])
user.name = response['name']
user.username = response['username']
user.save()
  • これは問題なく動作しますが、複雑な JSON データ オブジェクトをどのように処理すればよいでしょうか?
  • この JSON オブジェクトを Python オブジェクトに変換して簡単に使用できれば、もっと便利ではないでしょうか?

ベストアンサー1

アップデート

SimpleNamespacePython3 では、と を使用して 1 行で実行できます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)

namedtuplePython2 では、 andを使用して 1 行で実行できます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)

適切な属性名ではないキーを処理したい場合は、namedtupleをチェックしてください。renameパラメータ

おすすめ記事