JSON整形・検証ツール
JSONを貼り付けるだけで、整形(インデント付きで読みやすく表示)、minify、キーの並べ替えができます。パースできない場合は、パーサーが処理を止めた行と列を表示し、問題の箇所の下にポインターを示します。3,000行のレスポンスにカンマが1つ抜けていても、数秒で見つけられます。
0 文字 · 0 語 · 0 行
0 文字 · 0 語 · 0 行
すべてこのブラウザのタブ内で処理されます。テキストがアップロードされたり保存されたりすることはありません。
JSON の値の型
RFC 8259 で認められている値は次のものだけです。オブジェクトと配列は入れ子にでき、それ以外は末端の値です。
| 型 | 例 | ルール |
|---|---|---|
| オブジェクト | {"id": 7, "tags": ["a"]} | キーは二重引用符で囲んだ文字列にする必要があります。メンバーはカンマで区切り、末尾にカンマは付けられません。 |
| 配列 | [1, "two", null] | 任意の値の順序付きリスト。異なる型を混在できます。 |
| 文字列 | "caf\u00e9 \"quoted\"" | 二重引用符のみ。制御文字はエスケープが必要で、\u エスケープは16進4桁を使います。 |
| 数値 | -12.5e3 | 10進数のみ。先頭のマイナスは任意、先頭ゼロは不可、小数部と指数は任意です。NaN や Infinity は使えません。 |
| true、false、null | true | 小文字で、引用符なし。 |
パーサーが拒否するもの
以下の各入力は、このページのビルド時に整形ツールと同じ JSON.parse に渡して確認したものです。
| 入力 | 問題点 | JSON.parse |
|---|---|---|
{"a": 1,} | 末尾のカンマ | 拒否 |
{'a': 1} | 単一引用符の文字列 | 拒否 |
{"a": 1 /* note */} | コメント | 拒否 |
{a: 1} | 引用符なしのキー | 拒否 |
{"n": NaN} | NaN は JSON の数値ではありません | 拒否 |
{"n": 012} | 先頭のゼロ | 拒否 |
{"n": 0x1F} | 16進数 | 拒否 |
JSON 文字列のエスケープ
| 文字 | JSON での書き方 |
|---|---|
| 二重引用符 | "\"" |
| バックスラッシュ | "\\" |
| 改行(LF) | "\n" |
| タブ | "\t" |
| 復帰(CR) | "\r" |
| 制御文字 U+0001 | "\u0001" |
| スラッシュ(エスケープは任意) | "/" |
| 非 ASCII 文字(エスケープ不要) | "é" |
有効なJSONが守るべきルール
JSONはRFC 8259(実質的にはECMA-404と同一)で規定されています。ドキュメントは単一の値で、オブジェクト、配列、文字列、数値、true、false、nullのいずれかです。オブジェクトのキーは必ずダブルクォートで囲んだ文字列です。文字列にはダブルクォートのみを使い、ダブルクォート、バックスラッシュ、U+0020未満のすべての制御文字をエスケープする必要があります。そのため、文字列内のタブや改行は\tや\nと書きます。RFC 8259は、システム間でやり取りするJSONにUTF-8を使うことも求めています。
数値は10進数で、先頭のゼロ、16進数、NaN、Infinity、先頭のプラス記号は使えません。コメントや末尾カンマもありません。この最後の2つのルールが実際のエラーの大半を占めます。JavaScriptのオブジェクトリテラル、JSON5、多くの設定ファイルでは両方とも許可されているためです。下の一覧表は、よくある間違いをそれぞれフォーマッターと同じパーサーに通して作成したものです。
整形・minify・並べ替え
整形(プリティプリント)は改行とインデントを加えて構造を読みやすくします。JavaScriptプロジェクトではスペース2つが最も一般的で、Pythonのjson.dumps(indent=4)ではスペース4つがよく使われます。タブなら読む人が幅を選べます。圧縮(ミニファイ)は不要な空白をすべて削除します。APIのペイロードが小さくなり、ログや環境変数向けに1行へ収められます。
キーを並べ替えると、すべてのオブジェクトのメンバーが再帰的にアルファベット順に並びます。JSONのオブジェクトは定義上順序を持たないため、並べ替えても意味は変わりませんが、異なるシステムの2つのドキュメントを比較しやすくなります。なお、パース時に数値はJavaScriptの倍精度浮動小数点数になります。2^53(9,007,199,254,740,992)を超える整数、たとえ 一部のデータベースIDは、再整形すると精度が失われるため、文字列のまま保持してください。
JSONからほかの形式へ
整形したドキュメントは読みやすくなりますが、別の形式が必要になることもあります。オブジェクトの配列はJSON CSV変換でスプレッドシートになり、データ変換ではファイル全体をJSON、XML、YAML、CSVの間で変換できます。
よくある質問
- コメント入りのJSONがエラーになるのはなぜですか?
- 標準のJSONにはコメントの構文がなく、RFC 8259は意図的に定めていません。コメントを削除するか、読み込むツールが対応していれば、JSONCやJSON5としてファイルを使ってください。
- JSONエラーの「Unexpected token」とはどういう意味ですか?
- パーサーが、その位置に置けない文字に遭遇しました。たとえばシングルクォート、}の前の末尾カンマ、クォートのないキーなどです。表示されている行と列がその文字の位置です。
- キーを並べ替えるとデータは変わりますか?
- いいえ。JSONではオブジェクトのメンバーの順序に意味がないため、並べ替えたドキュメントも同じ内容です。配列の順序には意味があるので、変更されることはありません。
- 整形後に長い数値が変わってしまったのはなぜですか?
- JavaScriptは数値を64ビット浮動小数点数で保持するため、整数を正確に表せるのは2^53までです。それより大きいIDはパース時に丸められます。すべての桁を保つには、文字列として送信してください。
- 貼り付けではなくJSONファイルを読み込んで整形できますか?
- 任意のテキストエディターでファイルを開き、全選択してここに貼り付けてください。数十MBに及ぶ非常に大きなファイルは、テキストエリアの表示中にタブが重くなることがあります。