Kit — JSON整形・検証

JSON整形・検証

貼り付けるだけで整形・最小化・キーのソートができます。読み取れなかったときは何行目の何文字目かを示し、その行を抜き出してキャレットで指します。末尾カンマやコメントなど「JSONでは使えない書き方」も名前を出して指摘します。

結果

ここに整形結果が出ます。

入力サイズ
出力サイズ
出力の行数
キーの総数
配列要素の合計
最大ネスト深さ
最上位の型

この処理はブラウザ内で完結します。ファイルはどこにも送信されません。

ほかのJSON整形ツールと違うところ

エラーを行と桁で指す

ブラウザのエラーメッセージは、位置を含まないことがよくあります(Chromeは実用的な長さのJSONだと前後の抜粋を返すだけ、Safariは位置なし)。このページは構文を自分で追って場所を割り出し、行番号・文字位置と、その行の前後、該当文字へのキャレットを表示します。最小化された1行だけのJSONでも、その付近だけを切り出します。

「JSONでは書けない」を名前で言う

末尾カンマ、シングルクォート、引用符のないキー、コメント、全角スペースや全角引用符。どれもJavaScriptの感覚で書くと入り込むもので、「Unexpected token」からは理由が読み取れません。見つかったものを具体的に指摘します。

APIレスポンスを外に出さない

JSON整形ツールに貼られるものの多くはAPIの応答で、そこにはアクセストークンやメールアドレス、注文履歴がそのまま入っています。この処理はブラウザ内で完結し、貼り付けた内容はどこにも送信されません。

知っておくと詰まらないこと

なぜ末尾カンマやコメントが使えないの?JSONはJavaScriptの記法から生まれましたが、仕様は別(RFC 8259)で、JavaScript側が後から許した書き方は取り込まれていません。末尾カンマはES5でJavaScriptに入りましたがJSONには無く、コメントは最初から仕様にありません。設定ファイルで使いたい場合は、JSONCやJSON5といった別フォーマットか、`"_comment"` のような普通のキーを置く方法が使われます。
数値が貼り付けたときと変わることがあります変わります。`JSON.parse` は数値をすべて倍精度浮動小数点数に変換するため、`1.0` は `1` になり、`12345678901234567890` のような19桁を超える整数は末尾が丸められます。IDを文字列として返すAPIが多いのはこのためです。桁の大きなIDを扱うときは、整形前後で値が同じか確認してください。
同じキーが2つあるとどうなる?後に書かれたほうだけが残ります。これは整形の仕様ではなく `JSON.parse` の挙動で、読み込んだ時点で先のほうは失われています。「キーをソート」で消えたように見える場合も、実際はソートより前の段階で消えています。
JSON Lines(JSONL)とは1行に1つのJSONを書き、それを改行で並べた形式です。ログや大きなデータセットで広く使われていて、末尾に1行足すだけで追記でき、全体を読み込まなくても1行ずつ処理できるのが利点です。ファイル全体としてはJSONではないので、普通のJSONパーサに渡すと必ずエラーになります。ここでは各行が独立したJSONに見えたら自動で切り替えます。

よくある質問

貼り付けたJSONはどこかに送信されますか?

されません。整形も検証もブラウザの中だけで行われ、サーバーとの通信は発生しません。ページを閉じれば内容は消えます。

どれくらいの大きさまで扱えますか?

明確な上限は設けていませんが、端末のメモリ次第です。数MBまでは実用的に動きます。約200KBを超えると入力中の自動整形を止めて「整形する」ボタンでの実行に切り替わります。毎回のキー入力で数MBを解析し直すと、入力そのものが引っかかるためです。

壊れたJSONを自動で直してくれますか?

直しません。末尾カンマを消すだけなら安全ですが、シングルクォートをダブルクォートに置き換える処理は文字列の中にあるアポストロフィまで壊します。推測で書き換えて気づかれないより、場所と理由を示して直してもらうほうが安全だと判断しました。

行番号はブラウザのエラーメッセージから取っているのですか?

いいえ。ブラウザ任せにすると多くの場合これが出せません。Chromeは実用的な長さのJSONだと位置の代わりに前後の抜粋を返し、Safariはそもそも位置を含みません。そこで、このページは構文を自分で追って最初に破綻した位置を割り出し、そこから行と桁を数えています。理由の文言(「この , のあとに要素がありません」など)も同じ判定によるもので、ブラウザの原文は下に参考として並べています。整形そのものはブラウザ標準の処理を使っているため、表示される結果は通常のJSONの解釈と一致します。

キーをソートすると何が良いのですか?

同じ内容でもキーの順番が違うだけで差分が出る、という状況を避けられます。2つの設定ファイルを比較する前に両方をソートしておくと、本当に違う箇所だけが差分に残ります。並び順はUnicodeのコード順で、環境によって変わりません。