チュートリアル

Python で JSON を扱う実践ガイド:読み書き・検証・変換

Python 標準ライブラリを使った JSON の読み書き、例外処理、数値精度、変換、CLI デバッグを実務向けに整理します。

2026-07-2911分

Python 標準の json モジュールは、API サンプル、設定ファイル、データ変換の多くを処理できます。実務では、エンコーディング、エラー位置、数値精度、入力構造を明示することが重要です。

解析エラーの位置を残す

import json

raw = '{"name": "Ada", "active": true}'

try:
    data = json.loads(raw)
except json.JSONDecodeError as exc:
    print(f"Invalid JSON: line {exc.lineno}, column {exc.colno}: {exc.msg}")
    raise

完全なペイロードをログへ出すと秘密情報が漏れる可能性があります。行・列、リクエスト ID、短い説明だけを記録してください。

UTF-8 でファイルを読み書きする

import json
from pathlib import Path

source = Path("input.json")
target = Path("output.json")

with source.open("r", encoding="utf-8") as handle:
    data = json.load(handle)

with target.open("w", encoding="utf-8") as handle:
    json.dump(data, handle, ensure_ascii=False, indent=2)
    handle.write("\n")

重要な設定ファイルは一時ファイルへ書き、成功後に置き換えると途中で壊れにくくなります。

必要な場合は10進精度を保つ

import json
from decimal import Decimal

payload = json.loads('{"amount": 19.99}', parse_float=Decimal)
print(payload["amount"] * 3)

Decimal はそのままでは JSON に書き戻せません。契約が10進文字列を使うのか、最小通貨単位の整数を使うのかを決め、明示的に変換します。

変換前に構造を確認する

def normalize_users(value):
    if not isinstance(value, list):
        raise ValueError("Root must be an array")

    result = []
    for index, item in enumerate(value):
        if not isinstance(item, dict):
            raise ValueError(f"Item {index} must be an object")
        if "id" not in item or "email" not in item:
            raise ValueError(f"Item {index} is missing id or email")
        result.append({
            "id": str(item["id"]),
            "email": str(item["email"]).strip().lower(),
        })
    return result

複雑な契約には JSON Schema と保守されている検証ライブラリを使います。構文検証と契約検証は別の問題です。

変換ルールを明示する

ネストした JSON を CSV や DB 行へ変換する場合、配列、欠落、null をどう表すか決めてください。

def order_row(order):
    customer = order.get("customer") or {}
    return {
        "order_id": order.get("id"),
        "customer_email": customer.get("email"),
        "item_count": len(order.get("items") or []),
        "status": order.get("status", "unknown"),
    }

入力と期待出力をテストとして保存すると、変換時の判断を後から確認できます。

コマンドラインで確認する

python -m json.tool input.json
python -m json.tool --sort-keys input.json

視覚的に確認する場合は JSON BeautifierJSON Tree Viewer も利用できます。不要な秘密情報は事前に除去してください。

本番前チェック

  • • UTF-8 を明示する。
  • • 入力サイズとネスト深度を制限する。
  • • 欠落と明示的な null を区別する。
  • • 精度が必要な数値は Decimal、文字列、最小単位整数で扱う。
  • • 変換前に構造を検証する。
  • • 空配列、Unicode、大整数、不正 JSON をテストする。

全オプションは Python 公式の json ドキュメントで確認できます。まず標準ライブラリを使い、契約に必要なときだけ Schema 検証を追加しましょう。

Ene Chen

開発者に最高のJSON処理ツールを提供することに専念

関連投稿

さらに多くの投稿が近日公開予定...

ブログに戻る

関連ツール

よくある質問

更新の追い方、扱うトピック、リクエストについて。

新着記事を見逃さないには?

このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。

どんな内容が中心ですか?

JSON の検証・整形・変換・デバッグの流れと JSON Work の更新で、サイト上の無料ツールがブラウザ内でできることと対応づけています。

チュートリアル題材の提案はできますか?

はい。About の連絡先や GitHub からどうぞ。実務の統合やデバッグに直結するテーマを優先しています。