JSON の基本仕様:RFC 8259 が定めること

JSON の現行標準は RFC 8259(2017年、IETF 公開)です。よく参照される RFC 7159 はこれに更新されているため、今後は RFC 8259 を一次情報として扱います。仕様は意外にシンプルで、データ型は 文字列・数値・オブジェクト・配列・true/false・null の 6 種類のみと定められています。undefinedNaNInfinity、16 進数リテラルはすべて仕様外です。

文字エンコーディングは UTF-8 が必須(MUST)であり、BOM(バイトオーダーマーク)の付与は禁止されています。安全に表現できる整数の範囲は -(2^53)+1(2^53)-1(Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991)です。この範囲を超える整数は実装間で値の一致が保証されないため、大きな ID やタイムスタンプは文字列型で送受信するのが安全です。

JSON / JSONC / JSON5 — 3 つの形式の使い分け

「コメントを書きたい」「末尾のカンマを残したい」という要求から生まれたのが JSONC と JSON5 です。JSONC(JSON with Comments): コメントのみを追加した形式で VS Code の settings.jsontsconfig.json に採用されています。JSON5: ECMAScript 5.1 のサブセットで 10 種類の拡張構文を持ちますが、仕様書自体が「機械間通信には使わないこと」と明記しています。

機能JSON (RFC 8259)JSONCJSON5
コメント(// / /* */)不可
末尾カンマ不可
シングルクォート文字列不可不可
クォートなしキー不可不可
Infinity / NaN不可不可
16 進数リテラル不可不可
API・機械間通信推奨非推奨非推奨
設定ファイル(人が編集)推奨推奨

JSON Schema Draft 2020-12 とバリデーションツールの選び方

JSON の「構文が正しい」かどうかに加え、「意味的に正しい」かどうかを機械的に検証するのが JSON Schema バリデーションです。現行の最新仕様は Draft 2020-12(2020年12月公開)で、以前のドラフトから以下の重要な変更が加わっています。

  • タプル定義のキーワードが items から prefixItems に改名
  • $dynamicRef / $dynamicAnchor による再帰スキーマの汎化が追加
  • format キーワードが annotation(注釈)と assertion(検証)に分割
ツールTypeScript 型統合JSON Schema 準拠主な用途
AjvなしDraft 2020-12 完全対応API・最高速処理
Zod双方向(型 ↔ スキーマ)限定的(変換ライブラリ要)TypeScript プロジェクト全般
Joiなし独自スキーマNode.js レガシー
Yup部分的独自スキーマフォームバリデーション

パフォーマンス面では、スキーマのコンパイルはアプリ起動時に 1 回だけ行い、以降は使い回すことが鉄則です。Ajv の場合は ajv.compile() 済みの関数をキャッシュします。リクエストのたびにコンパイルすると数倍のオーバーヘッドが生じます。

API バリデーション 3 層構成

本番 API では、バリデーションを 3 つの層に分けて実施することが推奨されています。各層で早期にエラーを捕捉することで、不正データが奥深くまで侵入するのを防ぎます。

クライアント 送信 ① API 境界 構文 + JSON Schema チェック 400 Bad Request ユーザー向けメッセージ返却 ② ビジネスロジック 値の意味・整合性チェック 422 Unprocessable 詳細エラー内容を返却 ③ DB 書き込み前 制約確認 + サニタイズ DB 書き込み完了 処理成功
図 1: API バリデーション 3 層構成。各層で早期にエラーを捕捉し、不正データの侵入を防ぐ。

セキュリティ対策の 4 要素

DoS 攻撃やメモリ枯渇を防ぐため、以下の 4 つの制限を設定することが 2026 年時点のベストプラクティスです。

  • ペイロードサイズ上限(例: 1 MB)— 巨大なボディをそのままパースしない
  • ネスト深さ制限(例: 10 段)— 深くネストされた JSON によるスタックオーバーフローを防ぐ
  • 配列の最大長(例: 1,000 件)— 巨大配列によるメモリ枯渇を防ぐ
  • レートリミット— バリデーション処理自体を DoS の踏み台にさせない

WebToolBox の JSON 関連ツール

手元で JSON を素早く整形・検証したい場面には JSON整形ツール が役立ちます。インデント幅の調整や構造の確認をブラウザ上で完結できます。JSON データを表形式で扱いたいときは JSON↔CSV 変換ツール、YAML 形式との相互変換には YAML↔JSON 変換ツール、XML との相互変換には XML↔JSON 変換ツール をお使いください。キーや値を正規表現で検索・抽出するときは 正規表現テスター も組み合わせると効率よく作業できます。