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 を使用できます。
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 中国語 Web サイトの他の関連記事を参照してください。