JSONバリデーター

任意のJSONドキュメントを貼り付けると、RFC 8259に照らして問題なくパースできるかを確認できます。無効な入力では、正確な問題点(配列の最後の要素のあとの末尾カンマ、引用符のないキー、閉じていない文字列、JSONがダブルクォートを要求する場所のシングルクォート、不正なエスケープシーケンスなど)に加えて、パーサーが処理を諦めた行と列が返されます。APIレスポンス、設定ファイル、チームメイトが手作業で編集したpackage.json、コードジェネレーターの出力をデバッグするときに便利です。

JSON検証のしくみ

  1. 1

    JSONを貼り付ける

    ペイロード、設定ファイル、APIレスポンスを貼り付けます。空白は問題ありませんが、タブやコメントは不可です(純粋なJSONにはコメントがありません)。

  2. 2

    厳格なRFC 8259パーサーでパース

    バリデーターは仕様が禁じるものをすべて拒否します。末尾カンマ、引用符のないキー、シングルクォート、`undefined`、16進数などです。

  3. 3

    エラーを読む

    失敗すると、パーサーのメッセージとおおよその位置が表示されます。問題の文字へ直接たどり着くのに十分な情報です。

  4. 4

    修正して再検証

    問題を修正し、もう一度貼り付けて、コミットや送信の前にドキュメントが有効であることを確認します。

厳格なJSONで許されるもの、許されないもの

「ほぼJSON」と呼べる形式は数多く存在します(JSON5、JSONC、HJSON、YAMLに似たハイブリッドなど)。JSON仕様そのものは小さく厳格で、このバリデーターはあなたのドキュメントが厳格なパーサーを通過できるかを教えてくれます。これは下流のほとんどのシステムが実際に動かしているものです。

多くの人がつまずくルール

ルール 有効 無効
キーはダブルクォートの文字列であること {"a": 1} {a: 1}
文字列はダブルクォートのみ "hello" 'hello'
末尾カンマは不可 [1, 2, 3] [1, 2, 3,]
コメントは不可 (なし) // comment または /* */
数値: 先頭の+不可、.5不可 0.5 +1, .5
予約リテラルのみ true, false, null undefined, NaN
UTF-8エンコーディング Unicodeの文字列 不正なバイト列

よくあるエラーとその意味

  • 「Unexpected token }、閉じ波括弧の前に末尾カンマがあります。
  • 「Expected property name」、キーが引用符で囲まれていないか、先頭キーの引用符を忘れています。
  • 「Unexpected end of input」、開いた{または[が閉じられていません。括弧の数を数えてください。
  • 「Bad control character」、文字列リテラル内にタブ、改行、その他の制御バイトが含まれています。\t\nなどとしてエスケープしてください。
  • 「Duplicate key」、厳密にはJSON仕様のエラーではありません(仕様では一意であるべき(SHOULD)とされています)が、多くのバリデーターが警告します。本バリデーターはこれを致命的な失敗ではなく注意として扱います。

より緩い形式が必要な場合

  • JSON5は末尾カンマ、コメント、シングルクォートを許可します。それが目的の形式なら、JSON5パーサーを使ってください。
  • JSONC(コメント付きJSON)はVS Codeの設定が使う形式です。厳格なパース前にコメントを除去してください。
  • YAMLは別の形式です。「ただインデントしたJSON」だと思い込まないでください。

ヒント

  • コミット前に検証する。 package.jsonやCI設定のタイプミスは、誰かが気づくまでビルド全体を壊します。
  • 検証後に整形することで、レビューの差分が読みやすくなります。1行のJSONファイルは有効ですが、レビューには苦痛です。
  • 大きなペイロードにはストリーミング検証を使います(たとえばコマンドラインのjq)。ブラウザ内パースは数MBを超えると苦しくなります。

よくある質問

このツールは構文的な妥当性のみを確認します。つまり整形式のJSONかどうかです。構造的なルール(必須フィールド、列挙値、文字列長など)には、JSON Schemaバリデーターを使ってください。この2ステップは相補的で、そもそも有効なJSONでないドキュメントにSchema検証をかけても意味がありません。

標準JSONにコメントがないからです。///* */は常識的な拡張(JSONC、JSON5)ですが、純粋なJSONはそれらを拒否します。厳格なコンシューマーへ送る前にコメントを除去するか、スタック全体でJSON5を採用してください。

厳格なJSONでは無効です。仕様は有限の数値のみを許可します。コンシューマーが欠損データをどう扱うかに応じて、文字列("NaN""Infinity")またはnullとしてシリアライズしてください。

いいえ。検証はブラウザ内で実行されるため、貼り付けたペイロードはページから出ません。機密の設定ファイルや認証情報を含むAPIレスポンスにも安全です。

関連ツール

このツールは他の言語でも利用できます