PythonでJSONファイルを読み書き(json)
この記事では、PythonでJSONファイルを読み書きする方法を解説します。jsonモジュールを使った基本的な操作から、エラー処理、大規模ファイルの処理方法まで、様々なケースを網羅します。
目次
- JSONとは?
- json.load(): JSONファイルの読み込み
- json.dump(): JSONファイルの書き込み
- エラー処理
- 大規模ファイルの処理
- 実践例:辞書型データの読み書き
- 実践例:リスト型データの読み書き
JSONとは?
JSON (JavaScript Object Notation) は、データの交換に広く使われている軽量のデータフォーマットです。キーと値のペアで構成されたオブジェクトや、値のリストを表現できます。Pythonでは、jsonモジュールを使ってJSONデータを簡単に扱うことができます。
json.load(): JSONファイルの読み込み
json.load()関数は、JSONファイルを読み込んでPythonオブジェクトに変換します。
import json
# JSONファイルを開く
with open('data.json', 'r') as f:
# JSONデータをロードする
data = json.load(f)
# ロードしたデータを表示する
print(data)
この例では、'data.json'ファイルを読み込み、その内容をdata変数に格納しています。data変数の型は、JSONファイルの内容に応じて辞書型やリスト型になります。
json.dump(): JSONファイルの書き込み
json.dump()関数は、PythonオブジェクトをJSONファイルに書き込みます。
import json
# 書き込むデータ
data = {
"name": "John Doe",
"age": 30,
"city": "New York"
}
# JSONファイルを開く
with open('output.json', 'w') as f:
# JSONデータを書き込む
json.dump(data, f, indent=4)
この例では、data変数の内容を'output.json'ファイルに書き込んでいます。indent=4は、出力の整形に用いられ、読みやすくします。
エラー処理
JSONファイルの読み書き時には、ファイルが見つからない、JSON形式が不正などのエラーが発生する可能性があります。try-exceptブロックを使ってエラー処理を行うことをお勧めします。
import json
try:
with open('data.json', 'r') as f:
data = json.load(f)
except FileNotFoundError:
print("ファイルが見つかりません")
except json.JSONDecodeError:
print("JSON形式が不正です")
この例では、FileNotFoundErrorとjson.JSONDecodeErrorを捕捉しています。
大規模ファイルの処理
非常に大きなJSONファイルを読み込む場合、メモリ不足になる可能性があります。そのような場合は、一行ずつ読み込むなど工夫が必要です。ライブラリ `ijson` を使用すると、効率的に大規模なJSONファイルを処理できます。
import ijson
with open('large_file.json', 'r') as f:
parser = ijson.parse(f)
for prefix, event, value in parser:
if (prefix, event) == ('item', 'end_map'):
# 1つのアイテムが処理された後の処理
pass
実践例:辞書型データの読み書き
辞書型のデータをJSONファイルに読み書きしてみましょう。
import json
data = {"name":"太郎", "age":30}
with open('data.json', 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open('data.json', 'r') as f:
loaded_data = json.load(f)
print(loaded_data)
実践例:リスト型データの読み書き
リスト型のデータをJSONファイルに読み書きしてみましょう。
import json
data = [{"name":"太郎", "age":30}, {"name":"花子", "age":25}]
with open('data.json', 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open('data.json', 'r') as f:
loaded_data = json.load(f)
print(loaded_data)
関連記事
- PythonでJSONを辞書に変換(json.loads)
- Pythonで辞書を作成(dict, 辞書内包表記)
- Pythonで辞書に要素を追加・更新(update, 辞書[key] = value)
- Pythonで辞書のキー・値を取得(keys, values, items)
- Pythonで辞書をループ処理(for key in dict, for key, value in dict.items())
- Pythonでファイルに書き込む(write, writelines)
- Pythonでファイルを読み込む(read, readline, readlines)
- Pythonでファイルを開く・閉じる(open, close)
- Pythonでtry-except文による例外処理
- Pythonでwith文によるリソース管理