
皆さん、こんにちは!プログラミング学習、順調に進んでいますか? 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ライブラリを利用するメリットはたくさんあります。
- 標準ライブラリ: Pythonに標準で含まれているため、追加のインストールが不要で、すぐに利用を開始できます。
- 高い互換性: JSON自体が非常に汎用的な形式なので、PythonだけでなくJavaScript、Java、PHPなど、様々なプログラミング言語との間でデータをスムーズに交換できます。
- 直感的な操作: Pythonの辞書やリストとJSONのデータ構造が非常に似ているため、直感的に扱うことができ、学習コストも低いです。
- 可読性: 人間が読みやすい形式であるため、デバッグや設定ファイルの管理が容易になります。
サンプルコード
それでは、実際に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から受け取ったデータを保存したり、設定ファイルを読み書きしたりと、dumpやloadは実際の開発でよく使います!
# 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を指定するのを忘れないでくださいね!

