API リクエスト前に JSON を検証する
API リクエストを送る前に一度検証を挟むだけで、JSON 構文の問題と、認証・スキーマ・バックエンドのエラー をきれいに切り分けられます。
なぜ送信前に検証するのか
API リクエストが失敗すると、エラーは認証、権限、スキーマ検証、JSON の不正のいずれかを指し得ます。先に JSON ボディを検証しておけば、リクエストがサーバに届く前に丸ごと 1 種類の失敗を取り除けます。コピーした cURL コマンド、Postman のボディ、webhook サンプル、結合テストもレビューしやすくなります。
実行すべき構文チェック
厳格な JSON 検証では、ボディが JSON としてパース可能で、フォーマット済みの出力が送信意図と一致するかを確認します。
- すべての文字列とオブジェクトキーがダブルクォートを使っている
- コメントや末尾カンマがない
- 真偽値は True/False ではなく true/false
- 欠損値は undefined ではなく null かキー省略
- 最上位の値がエンドポイントの期待と一致する
ヘッダも重要
有効な JSON ボディでも、リクエストが適切な Content-Type を宣言していなければ失敗します。多くの JSON API では Content-Type: application/json を送信してください。エンドポイントが Accept も見るなら、Accept: application/json を含めて、クライアントとサーバでフォーマットの認識を一致させます。
壊れたリクエストボディ
{ userId: 42, active: True, tags: ['beta',], }
修正したリクエストボディ
{ "userId": 42, "active": true, "tags": ["beta"] }
構文検証のあとに
構文検証はあくまでパース可能であることを示すだけです。本番リクエストでは、必須フィールド、未知のフィールド、値の型、配列長、列挙値、日付文字列、ID が数値か文字列かなど、スキーマも確認してください。
デバッグのコツ
サーバが依然として有効な JSON を拒否する場合は、整形済みリクエストボディを既知の良いサンプルと比較してください。セマンティックな JSON diff はキー順を無視して本物の値の差分を見つけられるので、異なるツールが生成する payload に特に有用です。
小さな fetch + Ajv ラッパー
アプリ側に渡す前に、既知のスキーマで応答ボディを検証してください。モジュール読み込み時に 1 度コンパイルし、各呼び出しを保護します:const validate = ajv.compile(schema); const res = await fetch(url); const data = await res.json(); if (!validate(data)) throw new Error("Schema mismatch: " + ajv.errorsText(validate.errors)); return data; —— こうすれば上流の契約破壊が 5 層下に潜らず境界で表面化します。
JSON 修復ガイド
トピックハブ
- JSON Parse Errors: Read the Message, Jump to the Fix
- Fix Invalid JSON: From 'What's Wrong' to a Clean File
- JSON Formatter, Validator, Viewer: Pick the Right Tool
- Repair LLM JSON Output: Handling Almost-JSON from AI
- Privacy: JSON Tools That Don't Leave Your Browser
- JSON Interop: YAML, CSV, XML, JWT, Schema
個別ガイド
- Base64 文字列のデコード方法(および JWT ペイロード)
- URL エンコーディング:クエリパラメータとパスをパーセントエンコードする
- YAML を JSON に変換(インデントエラーを避ける)
- JSON を CSV に変換:オブジェクト配列をフラット化
- JSON を XML に変換:ルート要素・属性・配列
- JSON を文字列リテラルとしてエスケープ(二重エンコードされた JSON のデコード)
- JSON の末尾カンマを修正
- JSON のシングルクォートを修正
- JSON の引用符なしキーを修正
- LLM が出力した JSON を修復する
- JSON 解析エラー「Expected Property Name」を修正
- JSON と JavaScript オブジェクトリテラルの違い
- JSON フォーマッタ vs JSON Repair
- JSON の Unexpected Token エラーを修正
- JSON から JavaScript オブジェクトへの変換ツール