JSON の基本仕様:RFC 8259 が定めること
JSON の現行標準は RFC 8259(2017年、IETF 公開)です。よく参照される RFC 7159 はこれに更新されているため、今後は RFC 8259 を一次情報として扱います。仕様は意外にシンプルで、データ型は 文字列・数値・オブジェクト・配列・true/false・null の 6 種類のみと定められています。undefined、NaN、Infinity、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.json や tsconfig.json に採用されています。JSON5: ECMAScript 5.1 のサブセットで 10 種類の拡張構文を持ちますが、仕様書自体が「機械間通信には使わないこと」と明記しています。
| 機能 | JSON (RFC 8259) | JSONC | JSON5 |
|---|---|---|---|
| コメント(// / /* */) | 不可 | 可 | 可 |
| 末尾カンマ | 不可 | 可 | 可 |
| シングルクォート文字列 | 不可 | 不可 | 可 |
| クォートなしキー | 不可 | 不可 | 可 |
| 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 つの層に分けて実施することが推奨されています。各層で早期にエラーを捕捉することで、不正データが奥深くまで侵入するのを防ぎます。
セキュリティ対策の 4 要素
DoS 攻撃やメモリ枯渇を防ぐため、以下の 4 つの制限を設定することが 2026 年時点のベストプラクティスです。
- ペイロードサイズ上限(例: 1 MB)— 巨大なボディをそのままパースしない
- ネスト深さ制限(例: 10 段)— 深くネストされた JSON によるスタックオーバーフローを防ぐ
- 配列の最大長(例: 1,000 件)— 巨大配列によるメモリ枯渇を防ぐ
- レートリミット— バリデーション処理自体を DoS の踏み台にさせない
WebToolBox の JSON 関連ツール
手元で JSON を素早く整形・検証したい場面には JSON整形ツール が役立ちます。インデント幅の調整や構造の確認をブラウザ上で完結できます。JSON データを表形式で扱いたいときは JSON↔CSV 変換ツール、YAML 形式との相互変換には YAML↔JSON 変換ツール、XML との相互変換には XML↔JSON 変換ツール をお使いください。キーや値を正規表現で検索・抽出するときは 正規表現テスター も組み合わせると効率よく作業できます。