Pythonの「json」ライブラリでデータ交換をスマートに!

投稿者: | 2026-01-16

皆さん、こんにちは!プログラミング学習、順調に進んでいますか? WebアプリケーションやAPI開発に携わっている方なら、一度は「JSON」という言葉を耳にしたことがあるのではないでしょうか。現代のデータ交換において、JSONはもはや欠かせない存在です。Pythonには、このJSONデータをスマートに扱うための標準ライブラリ「json」が用意されています。今回は、この『json』ライブラリの基本的な使い方から便利な機能まで、皆さんが日々の開発でJSONを自信を持って扱えるようになるためのポイントを、私と一緒に見ていきましょう!

概要

JSON (JavaScript Object Notation) は、軽量で人間が読み書きしやすく、機械が解析・生成しやすいデータ交換フォーマットです。Web APIでのデータのやり取りや、設定ファイルの記述など、幅広い場面で利用されています。Pythonのjsonライブラリは、Pythonのデータ構造(辞書やリストなど)とJSON形式のデータを相互に変換する機能を提供します。具体的には、Pythonの辞書がJSONのオブジェクトに、PythonのリストがJSONの配列に、といった形で対応しており、文字列、数値、真偽値、NoneもそれぞれJSONの対応する型に変換されます。

メリット

jsonライブラリを利用するメリットはたくさんあります。

  1. 標準ライブラリ: Pythonに標準で含まれているため、追加のインストールが不要で、すぐに利用を開始できます。
  2. 高い互換性: JSON自体が非常に汎用的な形式なので、PythonだけでなくJavaScript、Java、PHPなど、様々なプログラミング言語との間でデータをスムーズに交換できます。
  3. 直感的な操作: Pythonの辞書やリストとJSONのデータ構造が非常に似ているため、直感的に扱うことができ、学習コストも低いです。
  4. 可読性: 人間が読みやすい形式であるため、デバッグや設定ファイルの管理が容易になります。

サンプルコード

それでは、実際にjsonライブラリを使ったコードを見ていきましょう。PythonのデータとJSON形式のデータ間で、どのように変換が行われるかを学びます。

import json

# 1. Pythonの辞書をJSON文字列に変換(シリアライズ)
python_dict = {
    "name": "Pythonista Hanako",
    "age": 17,
    "is_student": True,
    "hobbies": ["programming", "reading", "hiking"],
    "grades": {"math": 95, "science": 88},
    "note": None
}

# json.dumps()を使ってJSON文字列に変換
# indent引数で整形すると人間が読みやすくなります
# ensure_ascii=Falseで日本語などの非ASCII文字も正しく扱えます
json_string = json.dumps(python_dict, indent=4, ensure_ascii=False)
print("--- JSON文字列への変換(json.dumps()) ---")
print(json_string)

indent引数を使うと、出力されるJSONがグッと見やすくなりますよ。デバッグの時などにとても役立ちます!

# 2. JSON文字列をPythonの辞書に変換(デシリアライズ)
json_data_from_api = '''
{
    "product": "Laptop",
    "price": 1200.50,
    "available": true,
    "features": ["SSD", "16GB RAM", "Intel i7"],
    "manufacturer": "Tech Corp"
}
'''
# json.loads()を使ってPythonの辞書に変換
python_data = json.loads(json_data_from_api)
print("\n--- JSON文字列からの変換(json.loads()) ---")
print(python_data)
print(f"製品名: {python_data['product']}")
print(f"価格: {python_data['price']}ドル")

# 3. Pythonの辞書をJSONファイルに書き込む
file_name = "my_data.json"
try:
    with open(file_name, "w", encoding="utf-8") as f:
        json.dump(python_dict, f, indent=4, ensure_ascii=False)
    print(f"\n--- JSONファイルへの書き込み完了: {file_name} ---")
except IOError as e:
    print(f"\n--- ファイル書き込みエラー: {e} ---")

Web APIから受け取ったデータを保存したり、設定ファイルを読み書きしたりと、dumploadは実際の開発でよく使います!

# 4. JSONファイルからPythonの辞書を読み込む
try:
    with open(file_name, "r", encoding="utf-8") as f:
        loaded_data = json.load(f)
    print(f"\n--- JSONファイルからの読み込み完了: {file_name} ---")
    print(loaded_data)
    print(f"読み込んだデータに含まれる趣味: {loaded_data['hobbies']}")
except FileNotFoundError:
    print(f"\n--- ファイルが見つかりません: {file_name} ---")
except json.JSONDecodeError as e:
    print(f"\n--- JSONデコードエラー発生: {e} ---")

# 5. エラーハンドリングの例 (不正なJSON形式)
invalid_json = '{"key": "value",}' # 末尾のカンマは不正なJSON
print("\n--- 不正なJSON形式のデコード試行 ---")
try:
    json.loads(invalid_json)
except json.JSONDecodeError as e:
    print(f"エラーが発生しました: {e}")
    print("不正なJSON形式のためデコードできませんでした。")

みーちゃんのワンポイント

jsonライブラリには、文字列を扱うdumps/loadsと、ファイルを扱うdump/loadのペアがあります。この違いをしっかり理解することが大切です。また、json.dumps()json.dump()を使う際は、indent引数でインデントを指定すると、整形されて人間にとってとても読みやすくなりますよ。そして、日本語などの非ASCII文字を扱う場合は、ensure_ascii=Falseを指定するのを忘れないでくださいね!