PYTHON MEBY

PythonでJSONファイルを読み書き(json)

この記事では、PythonでJSONファイルを読み書きする方法を解説します。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)

関連記事