コンテンツへスキップ

JSONを整形

1行に詰まったJSONを読める形にしたり、逆に1行に圧縮したりできます。大きな数値もすべての桁を保持します。多くのオンライン整形ツールが気づかないうちに間違えるところです。データは保存されません。

  • 保存しません
  • 順番待ちなし
  • 登録不要・透かしなし
インデント
整形結果

整形されたJSONがここに表示されます。

使い方

1

JSONを貼り付け

または.jsonファイルをドロップします。貼り付けた内容はこのページ内にとどまり、何も保存されません。

2

インデントを選ぶ

スペース2つ、4つ、タブ、または1行に圧縮。選んだ設定は次回のために記憶されます。

3

コピーまたはダウンロード

結果をコピーするか、ファイルとして保存します。JSONが壊れている場合は、代わりに行、列、文字が表示されます。

往復しても残るもの

整形とはパースして出力し直すことで、入力したテキストのまま引き継がれるのは数値だけです。これは警告バナーが数える大きな整数よりも広い範囲に及びます。JavaScriptでの最短表記が入力と異なる数値は、すべて元のテキストから出力し直されるため、1.10は末尾のゼロを保ち、1e5は指数表記のまま、マイナスゼロもマイナスのままです。警告で数えるのは安全でない整数だけです。ほかの処理方法をとれば、単に表記が整うのではなく、気づかないうちにデータが壊れてしまうのはそれらだからです。

文字列はテキストのままでは引き継がれません。 エスケープは文書を読み込むときにデコードされ、出力するときに新たに書き出されるため、\u0041はAとして出力され、エスケープされたスラッシュはエスケープなしで出力されます。値は同じでもバイト列は異なります。これが問題になるのは1つの状況だけですが、その場合は大きな問題です。後続の処理で2つのJSONファイルをバイト単位で比較するなら、片方を整形ツールに通すことは何もしないのと同じではありません。

整形結果を信頼する前に、オブジェクト単位の動作を2つ知っておく価値があります。重複したキーは何の通知もなく解決され、最後のものが優先されます。ブラウザ自体のパーサーとまったく同じ解決方法です。「id」フィールドを2つ持つ文書も問題なく整形され、1つだけになって出てきますが、もう1つがあったことは何も知らされません。また、キーの順序がファイルどおりになるのは整数でないキーだけです。「1」「2」「name」を持つオブジェクトは、数字のキーが先に数値順で出てきます。JavaScript自体がオブジェクトのプロパティをその順序で並べるからです。通常のキーは書いた順序のままです。

ほかの目的には

手元にあるのがtsconfig.json、ESLintの設定、VS Codeの設定ファイルなら、このページはコメントや末尾のカンマを避けて整形するのではなく、その箇所を指摘します。JSONツールとしてはそれが正しい答えですが、そのファイルにとっては適したツールではありません。それらはJSONCで、エディターがすでにパースできます。コマンドラインなら、json5やdaselがJSONと偽ることなく読み込めます。

インデントを直す以上のことをするなら、整形ツールは適した形のツールではありません。jqなら、貼り付け欄では操作できないことを1つの式で実行できます。jq -S . はすべてのオブジェクトのキーを並べ替えて2つのレスポンスを比較できるようにし、jq 'del(.token)' はペイロードを誰かに見せる前にフィールドを取り除き、jq -c はオブジェクトの配列をパイプラインが必要とするJSON Linesにまとめます。また、クリップボードではなくファイルを読み込めるので、文書が気軽に選択できないほど大きくなると、その違いが効いてきます。

よくある質問

JSONはどこかに保存されますか?

いいえ。サーバーとの通信もログもなく、何も保存されません。ページを読み込んだ後はインターネットを切断しても動作します。これは見た目以上に重要です。オンライン整形ツールに貼り付けられるのは、APIレスポンス、設定ファイル、エラーのペイロードで、そこにはトークン、顧客データ、社内のホスト名が日常的に含まれています。

ほかの整形ツールと違い、大きな数値を正確に保持できるのはなぜですか?

ほかのほぼすべてのツールは、気づかないうちに数値を壊してしまうからです。JavaScriptの数値は64ビットの浮動小数点数なので、整数を正確に保持できるのは9,007,199,254,740,991までです。それより大きいもの(Twitter/Xの投稿ID、Discordのsnowflake、銀行の口座番号、64ビットのデータベースキーなど)は、`JSON.parse` を通った瞬間に末尾の桁が失われます。それでも数値はもっともらしく見えるため、危険なのです。7205759403792793600は、何の警告もなく7205759403792793000になります。このページは貼り付けた桁をそのまま正確に保持し、保護した数値の個数も表示します。

壊れたファイルはどう扱われますか?

問題があることだけでなく、どこに問題があるかを示します。行番号、列、問題の文字の下にキャレットを付けたその行、そして平易な説明が表示されます。「Unexpected token」ではなく「}の前に末尾のカンマがあります」といった具合です。末尾のカンマ、シングルクォート、引用符のないキー、文字列内のエスケープされていない改行の4つが、壊れたJSONの大半を占めており、それぞれを具体的に指摘します。

JSON Lines(NDJSON)に対応していますか?

はい、形も保ちます。JSON Linesは1行に1つの完全なJSON値を置く形式で、ログやデータのエクスポートで使われます。これを複数行に整形すると、この形式の利点そのものが失われてしまいます。自動で検出され、各行が個別に整形され、1行に1つの値というレイアウトが保たれます。

コメントや末尾のカンマがあるJSONを修正できますか?

その箇所を正確に指摘しますが、黙って受け入れることはしません。コメントと末尾のカンマはJSONではなく、JSON5やJSONCのものです。tsconfig.jsonのような設定ファイルが実際に使っているのはこちらです。それらを黙って受け入れる整形ツールは、あとでパーサーにエラーを出されるファイルを渡すことになり、ここでエラーになるより悪い結果になります。

サイズの上限はありますか?

こちらで設けた上限ではなく、使用可能なメモリ次第です。数MBの文書なら一瞬で整形できます。非常に大きな文書は、一度に保持できる量によって制限されるだけで、こちら側の制限はありません。

圧縮するとデータは変わりますか?

いいえ。圧縮で取り除くのはトークン間の空白だけです。キーの並べ替えも、数値の表記の変更も、何かの削除も一切行いません。結果はパースするとまったく同じ値になり、ただ小さくなるだけです。

ご注意: 整形は正確です。文書をパースして出力し直すため、パースできるものはそのまま出てきます。対応するのは厳密なJSONだけです。コメント、末尾のカンマ、引用符のないキーは、黙って修復せずにエラーにします。修復するには推測が必要になるからです。非常に大きな文書は、整形中にメモリ上に2つ分保持されます。

このツールをあなたのサイトに設置

ブログ、授業のページ、ヘルプ記事などに無料で設置できます。コードを1つ貼り付けるだけで、訪問者がそのページ上でツールを使えるようになります。