JSON フォーマッター

JSON のフォーマット、検証、圧縮、並べ替え。

このツールについて

JSON を貼り付けて、好みのインデントで整形したり、転送用に圧縮したり、差分を読みやすくするためにキーをアルファベット順に並べ替えたりできます。構文エラーは行と列付きで表示されます。

使い方

  1. JSON を「入力」ボックスに貼り付けるか、⌘K で検索欄に貼り付けて「JSON フォーマッター」を選びます。
  2. スペース 2 個、スペース 4 個、タブ、またはすべてを 1 行にまとめる「圧縮」から選びます。
  3. キーをアルファベット順にしたい場合は「キーを並べ替え」をオンにします。2 つのバージョンを比較しやすくなります。
  4. 結果をコピーします。JSON が無効な場合は、修正すべき行と列がエラーに表示されます。

よくある質問

JSON が無効になるのはなぜですか?
よくある原因は、最後の要素の後の末尾のカンマ、ダブルクォートではなくシングルクォート、引用符で囲まれていないキー、コメントです。JSON ではこれらはどれも許可されていません。エラーメッセージが正確な行と列を示します。
Python の dict や JavaScript のオブジェクトを読み込めますか?
はい。シングルクォート、True、False、None、引用符のないキー、末尾のカンマを含む値は自動的に有効な JSON に変換され、そのことがステータス行に表示されます。
個人データを含む API レスポンスを貼り付けても安全ですか?
はい。フォーマットはブラウザー内で行われ、サーバーには何も送信されないため、本番環境のデータを貼り付けても手元のマシンの外に出ることはありません。
フォーマットと圧縮の違いは何ですか?
フォーマットは改行とインデントを加えて人が読みやすくします。圧縮は省略可能な空白をすべて取り除き、ネットワーク経由で送るデータをできるだけ小さくします。
JSON オブジェクトでキーが重複するとどうなりますか?
JSON の標準は重複したキーを禁止していませんが、その意味も定めていません。ここでは、すべてのブラウザーの JSON.parse と同じく最後の値が優先されるため、{"a": 1, "a": 2} は {"a": 2} にフォーマットされます。フォーマット後にキーが消えたように見える場合は、入力に同じキーがもう 1 つないか探してください。
大きな JSON ファイルをフォーマットできますか?
はい。「ファイルを開く」をクリックするか、ファイルを「入力」欄にドロップしてください。ファイルはローカルで読み込まれ、アップロードされることはなく、50 MB までのファイルに対応しています。非常に大きなドキュメントではテキストボックスのスクロールが遅くなるため、コピーする代わりに「ダウンロード」で結果を formatted.json として保存してください。
JSON Lines や NDJSON をフォーマットするには?
JSON Lines は各行に 1 つの JSON 値を置く形式なので、ファイル全体としては有効な JSON ではなく、フォーマッターは 2 つ目の値が始まる位置でエラーを報告します。1 行ずつフォーマットするか、全体を [ ] で囲み、最後の行以外の各行末にカンマを追加して配列にしてください。

JSON フォーマッター・バリデーターとは?

JSON フォーマッターは、圧縮された JSON や乱雑な JSON を、一貫したインデントで 1 行に 1 キーずつ出力し直し、入れ子のデータを読みやすくします。JSON バリデーターは、テキストが JSON の文法に従っているかを確認します。キーと文字列はダブルクォートで囲む、末尾のカンマなし、コメントなし、リテラルは true、false、null のみ、といった規則です。このツールは両方を一度に行います。有効な入力は整形されて返され、無効な入力にはパーサーのメッセージが行と列付きで表示されます。

JSON を整形してもデータは変わりません。キー、値、配列の順序はそのままで、変わるのは空白だけです。ひとつ知っておくべき制限があります。JSON の数値は JavaScript の倍精度浮動小数点数として読み込まれるため、9007199254740991 を超える整数は精度が失われます。12345678901234567890 のような ID は 12345678901234567000 になります。API がこれほど大きな ID を送ってくる場合は、文字列で受け取れるよう依頼してください。多くの API は 64 ビットの ID をすでに文字列で返しています。

JSON の「Unexpected token」エラーを直す方法

「Unexpected token」は、JSON パーサーがその位置に現れてはいけない文字に出会ったことを意味します。エラーに表示された行と列を確認し、その直前のテキストを見てください。よくある原因は、[1, 2, ] のような末尾のカンマ、クォートのないキー、シングルクォートの文字列、設定ファイルからコピーした // コメント、そして JavaScript では出力されても JSON では許されない NaN や Infinity といった値です。

「Unexpected token < in JSON at position 0」というエラーは原因が異なります。テキストが期待した API レスポンスではなく HTML ページ、たいていはエラーページかログインへのリダイレクトなのです。パースする前に HTTP ステータスと Content-Type ヘッダーを確認してください。入力が Python の dict や JavaScript のオブジェクトリテラルの場合、JSON フォーマッターはシングルクォート、True、False、None、クォートのないキー、末尾のカンマを修復し、各修正をステータス行に一覧表示します。

JSON のキーは並べ替えるべき? インデントと並べ替えのベストプラクティス

JSON オブジェクトではキーの順序に意味がないため、キーをアルファベット順に並べ替えても安全で、2 つのバージョンを比較しやすくなります。「キーを並べ替え」は再帰的に動作し、入れ子のオブジェクトも並べ替えられますが、配列内では位置に意味があるため、配列の順序は保たれます。両方のバージョンを並べ替えてからテキスト差分に貼り付ければ、別の場所に移動しただけのキーではなく、実際の値の変更だけが表示されます。

JSON のインデントは、JavaScript のプロジェクトや API ドキュメントではスペース 2 個が最も一般的で、スペース 4 個は Python の json.dumps(indent=4) の慣習に合い、タブなら読む人がそれぞれ幅を選べます。圧縮した JSON は、ネットワークのペイロード、環境変数、ログ行など、1 行に 1 レコードであることが重要な場所に向いています。どれを選ぶにしても、再フォーマットでコードレビューが散らからないよう、リポジトリ全体で統一してください。

うまく動かない、または結果がおかしいですか? このツールの問題を報告