UltKit

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.5e310進数のみ。先頭のマイナスは任意、先頭ゼロは不可、小数部と指数は任意です。NaN や Infinity は使えません。
true、false、nulltrue小文字で、引用符なし。

パーサーが拒否するもの

以下の各入力は、このページのビルド時に整形ツールと同じ 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に及ぶ非常に大きなファイルは、テキストエリアの表示中にタブが重くなることがあります。