使い方
入力欄にJSONを貼り付けると、結果が表示されます。「方式」で整形を選ぶとインデント(半角スペース2つ・4つ・タブ)が付いて構造が一目でわかるようになり、圧縮を選ぶと余分な空白や改行をすべて取り除いてサイズを小さくします。検証を選ぶと値は変えずに文法が正しいかどうかだけを確認します。オプションの「キーを並べ替え」をオンにすると、すべてのオブジェクトのキーをアルファベット順(正確にはUnicodeコード単位順)に再帰的に並べ替え、「ASCII以外の文字をエスケープ」をオンにすると絵文字や日本語のような文字を\uXXXX形式に変換します。貼り付けたJSONが正しくない場合は、結果の代わりにエラーが何行目・何列目にあるかと、その周辺のコードを表示します。
整形・圧縮・検証はそれぞれ違う作業です
3つの方式はどれも同じJSONを扱いますが、目的が異なります。「整形」はインデントと改行を入れて人が読みやすくするもの、「圧縮」は逆にその余白をすべて取り除いてファイルサイズを小さくするものです。どちらも値そのものは保たれます。ただし後述の「大きな整数は精度が失われることがあります」で説明する場合(範囲外の数値がnullになる、重複したキーで最後の値だけが残る)と、-0が0になる場合は例外です。「検証」は何かを表示するためではなく、そのJSONが文法的に正しいかどうかだけを確認するためのものです。3つの方式はいずれも内部で同じパーサーを通るので、整形や圧縮が成功したこと自体が、そのJSONが正しかったことの証明にもなります。
JSONの文法でよくある間違い
JSONの文法はシンプルですが、その分細かい間違いに厳しいです。よくある問題として、配列やオブジェクトの最後の要素の後に残ったカンマ(trailing comma、例: [1, 2, 3,])、文字列やキーをシングルクォートで囲んでいる場合(JSONはダブルクォートしか許可しません)、キーにクォートを付けていない場合({name: "a"})、編集の際に残った//や/* */コメント、数値の先頭に付いた不要な0(01)、そしてundefinedやtrailing commaを含むJavaScriptのオブジェクトリテラルをそのままJSONだと勘違いすることが挙げられます。「コメント・trailing commaを許可」オプションをオンにすればコメントとtrailing commaはパース前に自動で取り除かれますが、シングルクォートやクォートなしキーのようなそれ以外の文法エラーは自分で直す必要があります。
JSONとJSON5・JSONCの違い
「JSON」はRFC 8259とECMA-404が定める厳密な標準で、コメントもtrailing commaも許可されず、文字列は必ずダブルクォートで囲む必要があります。「JSON5」と「JSONC」(JSON with Comments。VS Codeのsettings.jsonなどの設定ファイルでおなじみです)は、この標準を人間が手で書きやすいように拡張した方言で、コメントやtrailing comma、場合によってはクォートなしのキーまで許可します。このツールは既定では標準のJSONだけを検査しますが、「コメント・trailing commaを許可」オプションをオンにすると、よく使われるJSON5・JSONC的な入力(コメントとtrailing comma)をパース前に取り除いて標準JSONとして扱えるようになります。このオプションは、文字列の値の中にある//やカンマには手を付けないように作られています。
大きな整数は精度が失われることがあります
JavaScriptの数値型は1種類だけで、IEEE 754倍精度浮動小数点数を使います。この方式で誤差なく表現できる整数は2^53 - 1(9007199254740991、16桁)までです。これより長い整数リテラル(一部のシステムが使う64ビットのスノーフレークIDなど)がJSON文書に含まれていると、JSON.parseはそれを表現可能な最も近い値に丸めてしまい、末尾の数桁がエラーもなく静かに変わってしまいます。このツールはパースする前に元のテキストから16桁以上の整数リテラルを探して警告を表示するだけで、値そのものを(例えば文字列に)書き換えるような処理は行いません(書き換えると文書の構造自体が変わってしまうためです)。こうした大きな整数の正確な値がどうしても必要な場合は、あらかじめ文字列として保存するか、大きな整数を安全に扱える別のツールを併用してください。
ほかにも、エラーなしで値が変わるケースが2つあり、このツールはどちらも警告します。1e400のように倍精度ではまったく表現できないほど大きな数値はInfinityとして読まれ、結果ではnullになります。また、1つのオブジェクト内に同じキーが2回以上現れると、JSON.parseは最後の値だけを残し、それより前の値を黙って捨てます。
プライバシー
貼り付けたJSONはこのブラウザの中だけで処理され、どこにも保存・送信されません。ページを閉じると入力内容も消えます。