Python JSON 解析: シリアル化と逆シリアル化

Python で JSON データを読み取り、書き込み、解析する方法を学びます。 json.loads、json.dumps、および JSON エンコーダー/デコーダーのカスタマイズをマスターします。

エディターで試してみる

概要

JSON (JavaScript Object Notation) は、最新の Web API、構成、データベース ペイロードを支配する軽量のデータ交換形式です。 JSON 構造は Python の辞書やリストに似ているため、それらの間の翻訳は驚くほどシームレスです。 Python には組み込みの「json」モジュールが装備されており、JSON 文字列を Python オブジェクトに解析したり、Python オブジェクトを JSON 文字列に変換したりすることが簡単になります。

Python オブジェクト (辞書など) を生の JSON 文字列に変換するプロセスは、シリアル化またはエンコードと呼ばれます。これは、`json.dumps()` (文字列の場合) および `json.dump()` (ファイルへの直接書き込みの場合) によって処理されます。 JSON を整形するための「indent」や、属性をアルファベット順に並べるための「sort_keys」などの書式設定パラメータを制御できます。逆に、JSON 文字列を Python 辞書に解析することは逆シリアル化と呼ばれ、「json.loads()」および「json.load()」を介して実行されます。

文字列、数値、リスト、辞書などの標準的な Python 型は自動的に JSON にシリアル化されますが、カスタム オブジェクト (クラスや日時オブジェクトなど) は自動的にシリアル化されません。カスタム オブジェクトを直接エンコードしようとすると、「TypeError」が発生します。これを克服するには、開発者は「json.JSONEncoder」を継承するカスタム エンコーダ クラスを作成し、「.default()」メソッドをオーバーライドしてクラスを読み取り可能な辞書にシリアル化する必要があります。 JSON 操作をマスターすることが、外部 Web サービスと通信するための鍵となります。

コードと実行の出力

辞書を JSON 文字列に変換し、組み込みの json ライブラリを使用して解析し直します。

import json

# Python Dictionary representing a user profile
user_profile = {
    "name": "Alex",
    "is_premium": True,
    "skills": ["Python", "Docker"],
    "age": 28
}

# Serialize dictionary to JSON string
json_string = json.dumps(user_profile, indent=2)
print("--- JSON String ---")
print(json_string)

# Deserialize JSON string back to dictionary
parsed_dict = json.loads(json_string)
print("\n--- Parsed Python Dictionary ---")
print(f"Name: {parsed_dict['name']}")
print(f"First Skill: {parsed_dict['skills'][0]}")
端子出力
--- JSON String ---
{
  "name": "Alex",
  "is_premium": true,
  "skills": [
    "Python",
    "Docker"
  ],
  "age": 28
}

--- Parsed Python Dictionary ---
Name: Alex
First Skill: Python

段階的な実装

  • ペイロードの送信と REST API からのデータの読み取り
  • settings.json ファイル内に構成設定を保存する
  • マイクロサービス間で構造化ペイロードを渡す

よくある質問

json.dump と json.dumps の違いは何ですか?

json.dump (「s」なし) は、JSON データをファイル ストリームに直接書き込みます。 json.dumps (「s」を含む) は、データを Python 文字列変数にシリアル化します。

JSON デコードエラーはどのように処理しますか?

「json.JSONDecodeError」をキャッチする try/excel ブロックで解析コードをラップし、不正な形式の JSON 文字列を適切に処理します。

関連トピック

推奨される Python リソース

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