PythonでJSONを操る:ファイル・文字列の読み込み・書き込み徹底解説 📖
JSON (JavaScript Object Notation) は、軽量なデータ交換フォーマットとして、Web API、設定ファイル、データストレージなど、現代のプログラミングにおいて幅広く利用されています。Pythonは、このJSONデータを扱うための標準ライブラリ**json
**を提供しており、ファイルや文字列からの読み込み、そしてファイルや文字列への書き込みを簡単に行うことができます。
この記事では、json
モジュールを使ったJSONデータの基本的な読み込み・書き込み方法を、短いサンプルコードとともに分かりやすく解説します。Pythonでのデータ処理の幅を広げるためにも、JSONの操作をマスターしましょう!
JSONとは?なぜPythonで扱うのか?
JSONは、人間が読んで理解しやすく、機械が解析しやすいように設計されたデータフォーマットです。JavaScriptのオブジェクト表記法をベースにしていますが、言語に依存しないため、Pythonを含む多くのプログラミング言語で利用されています。
JSONデータの基本構造
JSONデータは、主に以下の2つの構造で構成されます。
オブジェクト (Object): キーと値のペアの集まり。Pythonの辞書 (dictionary) に対応します。
{ "キー1": "値1", "キー2": "値2" }
のように表現されます。配列 (Array): 値の順序付きリスト。Pythonのリスト (list) に対応します。
[ "値1", "値2", "値3" ]
のように表現されます。
これらの構造は入れ子にすることもでき、複雑なデータも表現できます。
PythonでJSONを扱うメリット
Web APIとの連携: ほとんどのWeb APIがJSON形式でデータを提供・要求するため、PythonでJSONを扱うことは必須です。
設定ファイル: プログラムの設定をJSONファイルで管理することで、柔軟な設定変更が可能になります。
データ交換: 異なるシステム間でのデータ交換フォーマットとして非常に優れています。
json
モジュール: Pythonの標準ライブラリであるjson
モジュールを使えば、Pythonのデータ型(辞書、リストなど)とJSONデータの間を簡単に変換できます。
Python json
モジュールでJSONを操作する
json
モジュールは、主に以下の4つの関数を提供します。
json.load()
: JSONファイルを読み込み、Pythonのオブジェクトに変換します。json.loads()
: JSON文字列を読み込み、Pythonのオブジェクトに変換します。json.dump()
: PythonのオブジェクトをJSON形式でファイルに書き込みます。json.dumps()
: PythonのオブジェクトをJSON形式の文字列に変換します。
1. JSONファイルを読み込む:json.load()
既存のJSONファイルからデータを読み込み、Pythonの辞書やリストなどのオブジェクトに変換します。
import json
# --- テスト用のJSONファイルを仮作成 ---
sample_json_data = {
"name": "山田太郎",
"age": 30,
"isStudent": False,
"hobbies": ["読書", "プログラミング", "旅行"],
"address": {
"city": "東京",
"zipCode": "100-0001"
}
}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(sample_json_data, f, ensure_ascii=False, indent=4)
print("data.json をテスト用に作成しました。\n")
# -------------------------------------
# JSONファイルを読み込み
try:
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print("--- JSONファイルから読み込んだデータ ---")
print(loaded_data)
print(f"タイプ: {type(loaded_data)}")
print(f"名前: {loaded_data['name']}")
print(f"趣味: {loaded_data['hobbies'][0]}")
except FileNotFoundError:
print("エラー: 'data.json' が見つかりません。")
# 出力例:
# data.json をテスト用に作成しました。
# --- JSONファイルから読み込んだデータ ---
# {'name': '山田太郎', 'age': 30, 'isStudent': False, 'hobbies': ['読書', 'プログラミング', '旅行'], 'address': {'city': '東京', 'zipCode': '100-0001'}}
# タイプ: <class 'dict'>
# 名前: 山田太郎
# 趣味: 読書
with open(...) as f:
: ファイルを安全に開閉するためのPythonの慣用的な書き方です。encoding="utf-8"
: 日本語などのマルチバイト文字を含む場合、文字化けを防ぐためにエンコーディングを指定することが重要です。
2. JSON文字列を読み込む:json.loads()
Pythonの文字列として存在するJSONデータを、Pythonのオブジェクトに変換します。これは、Web APIからのレスポンスなど、ファイルではなくメモリ上の文字列としてJSONデータを受け取る場合に便利です。
import json
# JSON形式の文字列
json_string = """
{
"product": "Laptop",
"price": 1200.50,
"inStock": true,
"features": ["軽量", "高速SSD", "高解像度ディスプレイ"]
}
"""
# JSON文字列をPythonオブジェクトに変換
python_obj = json.loads(json_string)
print("--- JSON文字列から読み込んだデータ ---")
print(python_obj)
print(f"タイプ: {type(python_obj)}")
print(f"商品名: {python_obj['product']}")
print(f"在庫あり: {python_obj['inStock']}")
# 出力例:
# --- JSON文字列から読み込んだデータ ---
# {'product': 'Laptop', 'price': 1200.5, 'inStock': True, 'features': ['軽量', '高速SSD', '高解像度ディスプレイ']}
# タイプ: <class 'dict'>
# 商品名: Laptop
# 在庫あり: True
3. PythonオブジェクトをJSONファイルに書き込む:json.dump()
Pythonの辞書やリストなどのオブジェクトを、JSON形式でファイルに書き出します。
import json
# Pythonの辞書データ
output_data = {
"id": 101,
"title": "Python Programming",
"author": "John Doe",
"published_year": 2023,
"tags": ["Python", "Programming", "Tutorial"]
}
# 書き出すJSONファイル名
output_file = "output.json"
# JSONファイルに書き込み
with open(output_file, "w", encoding="utf-8") as f:
json.dump(output_data, f, ensure_ascii=False, indent=4)
print(f"'{output_file}' にデータを書き込みました。")
# 書き込んだファイルの中身を確認 (おまけ)
with open(output_file, "r", encoding="utf-8") as f:
print("\n--- 書き込んだファイルの内容 ---")
print(f.read())
# 出力例:
# 'output.json' にデータを書き込みました。
# --- 書き込んだファイルの内容 ---
# {
# "id": 101,
# "title": "Python Programming",
# "author": "John Doe",
# "published_year": 2023,
# "tags": [
# "Python",
# "Programming",
# "Tutorial"
# ]
# }
ensure_ascii=False
: 日本語などの非ASCII文字をエスケープせずにそのまま出力するために必要です。これを指定しないと、\uXXXX
のようなUnicodeエスケープシーケンスで出力されます。indent=4
: 出力されるJSONデータを整形(インデント)して、人間が読みやすくするために使います。indent
に整数を指定すると、その数だけ空白文字でインデントされます。
4. PythonオブジェクトをJSON文字列に変換する:json.dumps()
PythonのオブジェクトをJSON形式の文字列に変換します。これは、Web APIへのリクエストボディとしてJSONデータを送信する場合や、JSONデータをデータベースに文字列として保存する場合などに使用します。
import json
# Pythonのリストデータ
data_list = [
{"item": "Pen", "price": 100},
{"item": "Notebook", "price": 300}
]
# PythonオブジェクトをJSON文字列に変換
json_string_output = json.dumps(data_list, ensure_ascii=False, indent=2)
print("--- Pythonオブジェクトから変換したJSON文字列 ---")
print(json_string_output)
print(f"タイプ: {type(json_string_output)}")
# 出力例:
# --- Pythonオブジェクトから変換したJSON文字列 ---
# [
# {
# "item": "Pen",
# "price": 100
# },
# {
# "item": "Notebook",
# "price": 300
# }
# ]
# タイプ: <class 'str'>
json.dump()
と同様に、ensure_ascii=False
とindent
引数も利用できます。
まとめと活用例
Pythonのjson
モジュールは、JSONデータとPythonのデータ型(辞書、リストなど)を相互に変換するための、シンプルかつ強力なツールです。
Web APIとの連携:
json.loads()
で受信データを解析し、json.dumps()
で送信データを生成します。設定ファイルの管理: プログラムの設定をJSONファイルに保存し、
json.load()
で読み込んで動的に設定を変更できるようにします。データ永続化: 複雑なPythonオブジェクトをJSON形式でファイルに保存し、後で簡単に読み出して再利用します。
ログ記録: 構造化されたログデータをJSON形式で出力することで、後の解析を容易にします。
json
モジュールを使いこなすことで、Pythonを使ったデータ処理の幅が大きく広がり、より柔軟でパワフルなアプリケーションを開発できるようになるでしょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座