ホームページ > バックエンド開発 > Python チュートリアル > JSON データをデータベース ストレージ用の Python オブジェクトに変換するにはどうすればよいですか?

JSON データをデータベース ストレージ用の Python オブジェクトに変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-08 08:14:02
オリジナル
637 人が閲覧しました

How to Transform JSON Data into Python Objects for Database Storage?

データベースストレージ用に JSON データを Python オブジェクトに変換する

シナリオ: Django アプリケーションは、保存する必要がある JSON データを Facebook API から受け取りますデータベース内で。現在、アプリケーションはカスタム ビューを使用して単純なデータ オブジェクトを処理していますが、複雑なデータ構造に苦労しています。

質問: データベースの保存と操作を容易にするために、JSON データを Python オブジェクトに変換するにはどうすればよいですか?

解決策: 高度なデータ構造を使用した JSON 解析

JSON データを Python オブジェクトに変換するには、SimpleNamespace やnamedtuple などの特殊なデータ構造を使用できます。これらの構造により、JSON データ キーに基づいて属性を動的に作成できます。

Python3 では、json.loads の object_hook で SimpleNamespace を使用できます。

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 を次のように使用できます。同様に使用します:

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)
ログイン後にコピー

これらの手法を使用すると、複雑な JSON データを Python オブジェクトに効率的に変換できます。データベースへの保存と操作が簡単になります。

以上がJSON データをデータベース ストレージ用の Python オブジェクトに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート