JSON整形・圧縮

読めるようにJSONへ字下げを入れるか、空白を落として一行にします。JSONが壊れているときは、行・列・その行そのものを返します — 4,000行のファイルのどこかが壊れていますと言われても、何の助けにもならないからです。

インデント

貼り付けたコードは端末から出ません。 ブラウザの中だけで処理し、どこにも送らず保存もしません。社内の設定ファイルや本番のクエリのように外へ出しにくいものも、そのために使えます。

JSON は JavaScript のオブジェクトではありません

見た目が似ているので、JavaScript で書く癖がそのまま持ち込まれます。キーは必ず二重引用符で囲み、単一引用符は文字列にも使えません。最後の項目の後ろのカンマ、// コメント、undefined や NaN も標準にはありません。この検査器はそうした間違いを「予期しない文字」とひとまとめにせず、単一引用符なのか、末尾のカンマなのか、引用符の無いキーなのかまで見分けて伝えます。何が間違っているか分からなければ直せないからです。

位置は自分で走査して見つけます

ブラウザの JSON.parse は拒否するだけで、位置を信頼できる形では教えてくれません。そこで拒否されたら小さな検査器が最初から走査し直し、何文字目でずれたかを見つけて行と桁に直し、その行と矢印を一緒に表示します。文字列の中にそのまま入れた改行、\u の後ろに16進数が4桁無いもの、500段を超える入れ子のように、目では見つけにくいものもここで引っかかります。

値はそのままでも、表記は変わることがあります

一度読み込んで書き直す方式なので意味は保たれます。ただし数値は JavaScript の数値として読まれるため、1.0 は 1 に、1e3 は 1000 になります。2^53 を超える整数、たとえばスノーフレーク ID や64ビットのキーは、末尾の桁が静かに変わってしまうので、そうした値は文字列として持つべきです。\u00e9 のようなエスケープは実際の文字に戻り、同じキーが二度あれば後ろのものだけが残ります。サイズは UTF-8 のバイト数で数えるので、日本語一文字は3バイトです。

1行1桁で引っかかる見えない文字

ファイル先頭の BOM は空白ではなく文字なので、最初の行の最初の桁で予期しない文字として引っかかりますが、矢印の指す場所には何も見えません。Windows のメモ帳が保存したファイルがたいていこれです。一行にオブジェクト一つずつを積んだ JSON Lines は一つの文書ではないので、二行目の最初の桁で引っかかります。一行ずつ入れるか、[ ] で包んで間にコンマを入れてください。逆に "文字" や 123 のようなオブジェクトでない値一つも、規格上は JSON なのでそのまま通ります。

整形後の形と長い結果

インデントは2桁と4桁から選びます。空の配列と空のオブジェクトは []・{} として一行に残り、値が一つでも入ると要素ごとに一行を取ります。数字一万個の配列は一万行になります。結果が 4,000 行を超えると行番号を畳んで一塊で描きますが、文字とコピーは変わりません。結果を入力欄へ戻して、もう一度圧縮することもできます。

よくある質問

どこで壊れているか正確に分かりますか

分かります。ブラウザのパーサのメッセージは当てになりません — Chromeは短い入力では位置を落として断片だけを示しますし、文言もブラウザによって違います。そこでこちらで入力を走査し、壊れた文字の位置を求めてから行と列に直しています。単引用符や末尾のカンマといったよくある誤りには、何が起きたのかの説明も添えます。

キーの順番は変わりますか

変わりません。現れた順にそのまま書き戻します。ただしJSONの規格ではキーの順番に意味がありません。順番に依存するコードがあるなら、直すべきはそちらのほうです。

コメント付きのJSONも読めますか

標準のJSONにコメントはありません。tsconfig.json のようにコメントを許すファイルは、その位置で止まります — 先にコメントを外してください。

とても大きいファイルも扱えますか

すべてこの端末のメモリで動くので、数十メガバイトになるとブラウザが苦しくなります。その大きさのファイルは、必要な部分だけを貼り付けてください。

結果に行番号がありません。

4,000 行を超えると番号を畳みます。行ごとに要素を作って描く方式なので、数万行になるとブラウザが重くなるからです。文字は全部あり、コピーもできます。番号がどうしても必要なら、エディタに貼り付けてください。

貼り付けたものはサーバへ送られますか

送られません。すべてブラウザの中で動き、送信も保存もしません。だからこそ、ふつうならウェブページに貼り付けない社内の設定ファイルや本番のクエリにも使えます。通信を切ったままでも動きます。