コンテンツへスキップ

JSONをチェック

有効か無効かだけでなく、行、列、文字、そして直し方まで。データは保存されず、チェックはこのページ内で行われます。

  • 保存しません
  • 順番待ちなし
  • 登録不要・透かしなし
整形結果

JSONを貼り付けると、入力しながらチェックされます。

使い方

1

JSONを貼り付け

またはファイルをドロップします。その場で読み込まれ、どこにも送信されません。

2

結果を確認

有効なら、中身の件数も表示されます。無効なら、正確な箇所に印が付きます。

3

修正して再チェック

その場で編集すると、入力に合わせて結果が更新されます。

JSONが実際に禁止しているもの

JSONの文法は意図的にごく小さく作られており、検証エラーのほとんどは、JSONが採用しなかったJavaScriptの書き方を持ち込んだ、ほんの数種類のものです。最後の要素の後の末尾のカンマ。ダブルクォートの代わりのシングルクォート。引用符のないキー。コメント(JSONにはコメントがなく、これまでもありませんでした)。有効なJavaScriptの数値でも有効なJSONではないNaNとInfinity。そして先頭のバイトオーダーマーク(BOM)です。これはどのエディターでも見えず、一部のWindowsツールがUTF-8で保存するときに付加するもので、まったく問題のない文書を最初の1文字目でエラーにしてしまいます。

文法上は許されていても、問題を引き起こすものが2つあります。「有効」が「正しい」と同じではないのはこのためです。重複したキーは仕様で禁止されていません。しかしパーサーごとに解決方法が異なり、ほとんどは最後のものを採用するため、キーが重複した文書はここで有効と判定されても、言語によって意味が変わります。また、JSONでは数値の精度に上限が定められていませんが、ほとんどのパーサーは浮動小数点数として読み込みます。約9千兆を超える整数は気づかないうちに丸められるため、大きなIDは文字列として扱われることが多いのです。

結果として表示されるのは、パースが止まった正確な行、列、文字で、たいていはメッセージそのものより役に立ちます。パーサーが報告するのは、ミスをした箇所ではなく、文書が意味をなさなくなった箇所です。閉じ波括弧が欠けているとファイルの末尾で報告され、カンマが欠けているとその次のトークンで報告されます。報告された位置の少し手前を見る習慣が、最も時間の節約になります。

正しい形式であることと、正しい内容であることは別です。この区別は重要です。ここで確認できるのは構文がパースできることです。APIが求めるフィールドが文書に含まれているか、値が範囲内か、日付が本当に日付か。どれもJSONの問題ではありません。それはスキーマ検証で、スキーマが必要です。ここで完璧な文書でも、送信先のサービスにすぐ拒否されることがあります。

ほかの目的には

文法ではなくスキーマに照らして文書をチェックするなら、JSON Schema が標準で、ajv がその最速の実装です。必須フィールドが欠けている、値が範囲外だといったことを教えてくれます。たいていの場合、本当に知りたいのはそちらです。check-jsonschema は同じチェックをコマンドラインやCIで実行できます。

コマンドラインで何かするなら、jq は持っておくべきツールです。jq empty file.json は検証して成功時には何も出力しないので、スクリプトにぴったりです。jq . は整形します。メモリに収まらないほど大きなファイルには、jq --stream やPythonの ijson が逐次的にパースします。これは文書全体を読み込むページにはできないことです。

よくある質問

JSONはどこかに保存されますか?

いいえ。サーバーとの通信もログもなく、何も保存されません。ページを読み込んだ後はインターネットを切断しても動作します。これは見た目以上に重要です。オンライン整形ツールに貼り付けられるのは、APIレスポンス、設定ファイル、エラーのペイロードで、そこにはトークン、顧客データ、社内のホスト名が日常的に含まれています。

JSONが壊れているとき、何が表示されますか?

行、列、正確な文字の下にキャレットを付けたその行、そしてそこに何が来るべきだったかです。JSONが壊れる原因のほとんどは4つのどれか(末尾のカンマ、ダブルクォートの代わりのシングルクォート、引用符のないキー、文字列内の実際の改行)で、それぞれ一般的な構文エラーとしてではなく、具体的に指摘されます。

何が有効とみなされますか?

RFC 8259に厳密に従います。つまり、キーはダブルクォートで囲み、末尾のカンマやコメントはなく、数値に先頭のゼロや16進数は使えません。厳密であることこそ構文チェックの意味です。パーサーが拒否するものを受け入れてしまえば、何も分からないのと同じです。

JSONをスキーマに照らしてチェックできますか?

いいえ。これは構文のチェックで、別の問題です。構文とは、そのテキストがそもそもJSONかどうかです。スキーマとは、データに正しいフィールドと型があるかどうかです。このページが答えるのは前者です。ファイルがパースできることを伝え、見つかった構造を表示しますが、フィールドが本来どうあるべきかは分かりません。

有効と表示されるのに、APIに拒否されるのはなぜですか?

有効なJSONと、APIが求めるJSONは別のものだからです。構文的に完璧な文書でも、必須フィールドが欠けていたり、数値のところに文字列を使っていたり、エンドポイントの想定と入れ子の構造が違っていたりすることがあります。このページに表示される構造の概要をAPIのドキュメントと見比べてください。たいていはすぐに食い違いが見つかります。

大きな数値も正しくチェックされますか?

はい、1桁も違えずにチェックします。ほとんどの構文チェックツールは、気づかないうちに数値を壊してしまいます。JavaScriptの数値は64ビットの浮動小数点数なので、整数を正確に保持できるのは9,007,199,254,740,991までです。それより大きいもの(Twitter/Xの投稿ID、Discordのsnowflake、銀行の口座番号、64ビットのデータベースキーなど)は、`JSON.parse` を通った瞬間に末尾の桁が失われます。それでも数値はもっともらしく見えるため、危険なのです。7205759403792793600は、何の警告もなく7205759403792793000になります。このページは貼り付けた桁をそのまま正確に保持し、保護した数値の個数も表示します。

サイズの上限はありますか?

こちらで設けた上限ではなく、使用可能なメモリ次第です。数MBの文書なら一瞬で整形できます。非常に大きな文書は、一度に保持できる量によって制限されるだけで、こちら側の制限はありません。

ご注意: チェックするのはJSONが正しい形式かどうかで、内容に意味があるかどうかではありません。文書が完全に有効でも、APIが求めるフィールドが欠けていることはあります。それはスキーマ検証で、スキーマが必要です。ここで分かるのは、パースが止まった正確な行、列、文字です。

このツールをあなたのサイトに設置

ブログ、授業のページ、ヘルプ記事などに無料で設置できます。コードを1つ貼り付けるだけで、訪問者がそのページ上でツールを使えるようになります。