Python で JSON ファイルを読み取って解析する方法

組み込みの json モジュールを使用して、Python で JSON ファイルを読み取り、解析し、ロードする方法を学びます。 JSON 文字列から辞書への変換、またはその逆の変換をマスターします。

エディターでこのソリューションを試してください

概要

JSON (JavaScript Object Notation) は、API、構成ファイル、およびデータ ストレージで最も一般的なデータ形式です。 Python には、JSON データの読み取り、解析、書き込みを驚くほど簡単にする組み込みの「json」モジュールが付属しています。 JSON オブジェクトは Python 辞書に完全にマップされ、JSON 配列は Python リストにマップされるため、JSON の操作はネイティブに感じられます。

外部ファイルから JSON を読み取るには、「json.load()」関数を使用します。この関数は、ファイル ストリームを解析し、JSON 構造を Python データ型に変換します。 JSON データがすでに文字列としてメモリにロードされている場合は、代わりに `json.loads()` 関数を使用します (「s」は文字列を表します)。正しい関数を選択すると、パーサーのクラッシュが防止されます。

JSON を使用する場合は、エンコードと潜在的なフォーマット エラーを処理することがベスト プラクティスです。 `open()` ステートメント内で `encoding="utf-8"` を使用すると、スクリプトが特殊文字で失敗することがなくなります。ファイル操作を「json.JSONDecodeError」をキャッチする「try-excel」ブロックでラップすると、JSON ファイルの形式が不正な場合にアプリが適切に機能低下することが保証されます。

コードと実行の出力

このコードは、サンプル JSON ファイルの作成、それを読み取って解析して Python 辞書に戻す方法、および JSON 文字列を処理する方法を示しています。

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
端子出力
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

段階的な実装

  • 組み込みの json モジュールをスクリプトにインポートします。
  • open("filename.json", "r", encoding="utf-8") をファイルとして使用して、JSON ファイルを開きます。
  • ファイル オブジェクトを json.load(file) に渡し、内容を解析して Python 辞書に入れます。
  • すでにメモリにロードされている生の JSON 文字列を解析する必要がある場合は、 json.loads(string_data) を使用します。

よくある質問

json.load() と json.loads() の違いは何ですか?

json.load() はファイルのようなストリーム オブジェクト (ディスクからの読み取り) を受け入れますが、json.loads() は JSON コンテンツを含む標準の文字列またはバイト オブジェクト (メモリからの読み取り) を受け入れます。

カスタム クラスの JSON シリアル化エラーはどのように処理すればよいですか?

Python の json モジュールは、デフォルトではカスタム クラス インスタンスをシリアル化できません。 json.JSONEncoder を拡張するカスタム エンコーダ クラスを提供するか、最初にヘルパー メソッドを使用してインスタンスの属性を辞書に抽出する必要があります。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。