Web APIから取得したデータや設定ファイルなど、テキスト形式(文字列)のJSONデータをPythonプログラム内で扱えるようにするには、標準ライブラリ json モジュールの loads() 関数を使用します。
これにより、JSON形式の文字列がPythonの辞書(dict)やリスト(list)などのオブジェクトに変換され、キーやインデックスを使って自由にデータを取り出せるようになります。
目次
実装例:製品カタログデータの解析
ここでは、APIから返却されたと仮定したJSON形式の文字列(スマートフォンのカタログ情報)を解析し、特定の情報(カテゴリ、特徴、製品価格など)を抽出するコードを実装します。
ソースコード
import json
# 1. JSON形式の文字列を用意
# (通常はAPIレスポンスやファイル読み込みで取得します)
json_response = """
{
"category": "Smartphone",
"tags": ["5G", "OLED", "Dual Sim"],
"products": [
{ "model": "Galaxy S25", "price": 120000, "in_stock": true },
{ "model": "Pixel 9", "price": 98000, "in_stock": false }
],
"meta_info": null
}
"""
# 2. json.loads() で文字列をPythonオブジェクト(辞書)に変換
# loads = load string の略です
data = json.loads(json_response)
# 変換結果の確認
print("--- 変換後のデータ型 ---")
print(type(data)) # <class 'dict'>
print("\n--- データへのアクセス ---")
# 辞書のキーを指定してアクセス
print(f"カテゴリ : {data['category']}")
# リストのインデックスを指定してアクセス
print(f"タグ1 : {data['tags'][0]}")
# ネスト(入れ子)したデータへのアクセス
# data["products"]でリストを取得 -> [0]で最初の要素を取得 -> ["price"]で価格を取得
first_model_price = data['products'][0]['price']
print(f"製品価格 : {first_model_price}")
# JSONのnullやbooleanの変換確認
print(f"在庫状況 : {data['products'][1]['in_stock']}") # false -> False
print(f"メタ情報 : {data['meta_info']}") # null -> None
実行結果
--- 変換後のデータ型 ---
<class 'dict'>
--- データへのアクセス ---
カテゴリ : Smartphone
タグ1 : 5G
製品価格 : 120000
在庫状況 : False
メタ情報 : None
解説
json.loads() の役割
json.loads(文字列) は、JSONフォーマットに従った文字列を受け取り、対応するPythonのデータ型に変換して返します。
JSONとPythonの型対応表
JSONのデータ型は、Pythonの以下の型に自動的にマッピングされます。
| JSON | Python |
object ({...}) | dict (辞書) |
array ([...]) | list (リスト) |
string | str |
number (int/float) | int または float |
true / false | True / False |
null | None |
注意点:loads と load の違い
json.loads(string): JSON形式の文字列を読み込む場合に使います(Load String)。json.load(file):open()で開いたファイルオブジェクトから直接読み込む場合に使います。
# ファイルから読み込む場合の例
with open("data.json", "r") as f:
data = json.load(f)
