本文へスキップ
App Museum
English

JSON整形ツール

JSONを見やすく整形・圧縮し、キーの並べ替えや、大きな整数などの数値を入力の書き方のまま残すこともできる無料ツール。構文エラーは行と文字目、原因を示します。ブラウザ内で処理され、データは送信されません。

使い方

  1. 上のテキストエリアにJSONを貼り付けます
  2. キーを並べ替えたいときは「キーを文字コード順に並べ替える」にチェックを入れます
  3. 大きな整数や 1.0 のような数値を入力のとおりに書き出したいときは「数値を入力の書き方のまま残す」にチェックを入れます
  4. 「整形(スペース2つ)」「整形(スペース4つ)」「整形(タブ)」のいずれかを押すと、インデント付きで表示されます
  5. 「圧縮」を押すと、空白と改行を取り除いた1行のJSONになります
  6. 結果の下にある「コピー」で、結果だけをクリップボードへコピーできます
  7. JSONとして読み取れないときは、結果の代わりに、最初の誤りの行と文字目、原因、その行の抜粋が表示されます

入力を編集するか、どちらかのチェックを切り替えると、前の結果とエラー表示は消えます。もう一度ボタンを押して、現在の入力と設定から結果を作り直してください。

具体例

入力:

{"name":"太郎","age":30,"tags":["a","b"],"address":{"city":"東京","zip":null}}

「整形(スペース2つ)」の出力:

{
  "name": "太郎",
  "age": 30,
  "tags": [
    "a",
    "b"
  ],
  "address": {
    "city": "東京",
    "zip": null
  }
}

配列は要素が短くても1行に1要素ずつ展開されます。空の配列 [] と空のオブジェクト {} はそのままです。「整形(スペース4つ)」は同じ構造でインデントが4つになり、「整形(タブ)」は1段につきタブ文字1つになります。「圧縮」は入力例と同じ1行に戻ります。

キーの並べ替え

「キーを文字コード順に並べ替える」にチェックを入れると、入れ子の中も含めたすべてのオブジェクトで、キーを並べ替えてから書き出します。整形と圧縮のどちらにも効きます。配列の要素の順序は変えません。

入力:

{"name":"太郎","id":7,"Tags":["b","a"],"10":true,"2":false}

チェックを入れて「圧縮」を押した出力:

{"10":true,"2":false,"Tags":["b","a"],"id":7,"name":"太郎"}

順序は、キーを先頭の文字から1文字ずつUnicodeのコードポイントで比べて決めます。辞書の順とは次の点が異なります。

  • 数字は数の大小ではなく文字として比べるため、"10" は "2" より前に来ます
  • 英字のAからZの大文字は、aからzの小文字よりすべて前に来ます("Tags" は "id" より前)。Å のようなアクセント付きの文字は、大文字でも z より後ろです
  • 記号は文字ごとに位置が決まっています。_ はAからZの大文字とaからzの小文字の間、- は数字より前です
  • ひらがな、カタカナ、漢字は英数字のあとに、コードポイントの順で並びます。読みの五十音順にはなりません

これは jq -S や、Pythonの json.dumps(..., sort_keys=True) と同じ順序です。同じデータのJSONをキーの順序だけが違う状態から同じ形にそろえられるので、テキスト差分比較で2つのJSONを比べる前の下準備に使えます。

数値を入力の書き方のまま残す

チェックを入れていないとき、数値はJavaScriptの数値として読み取ってから書き出すため、表記が変わることがあります(次の節を参照)。結果の中に入力と書き方が変わった数値があると、結果の上に個数と最初の3つの例を「12345678901234567890 → 12345678901234567000」の形で表示します。

「数値を入力の書き方のまま残す」にチェックを入れると、すべての数値を入力に書かれた文字のまま書き出します。整形・圧縮・キーの並べ替えのどれとも組み合わせられます。

入力:

{"id":12345678901234567890,"price":1.50,"rate":1e-3}

チェックを入れずに「圧縮」を押した出力:

{"id":12345678901234567000,"price":1.5,"rate":0.001}

チェックを入れて「圧縮」を押した出力:

{"id":12345678901234567890,"price":1.50,"rate":1e-3}
  • 12345678901234567890 のような桁の多い整数、1.50 の末尾の0、1e-3 の指数表記、-0 の符号がそのまま残ります
  • 1e400 のように表現できる範囲を超える数値も、エラーにせずそのまま書き出します
  • 変わらないのは数値だけです。重複したキー、整数の形をしたキーの順序、文字列のエスケープは、チェックを入れても次の節のとおりに変わります

この機能は、ブラウザがJSONの数値を書かれた文字のまま受け渡す仕組み(JSON.rawJSON)を使います。Chrome 114、Edge 114、Firefox 135、Safari 18.4 より前のブラウザでは、チェックボックスを選べず、その理由を下に表示します。書き方が変わった数値の表示も出ません。

整形で変わること・変わらないこと

このアプリは入力をいったんJSONとして読み取り、その値を書き出し直します。空白と改行を入れ替えるだけではないため、値は同じでも表記が変わる箇所があります。

  • 数値の表記: 1.0 は 1、1e2 は 100、0.10 は 0.1、-0 は 0 になります(「数値を入力の書き方のまま残す」にチェックを入れたときを除く)
  • 桁数の多い整数: 12345678901234567890 は 12345678901234567000 になります。JavaScriptの数値で正確に表せない桁は失われます。チェックを入れれば入力の桁のまま残りますが、受け取る側のプログラムでも同じ桁が失われることがあるため、大きなIDは文字列として扱われているかを確認してください
  • 重複したキー: {"a":1,"a":2} は {"a":2} になり、後ろの値だけが残ります
  • キーの順序: 並べ替えのチェックを入れていないとき、基本は入力の順ですが、"2" や "10" のような整数の形をしたキーは、数値の小さい順に先頭へ移動します。チェックを入れると、整数の形をしたキーも含めて文字コード順になります
  • 文字列のエスケープ: あ は あ、\/ は / と、読める文字に戻して出力します。改行の \n や引用符の \" などはエスケープされたままです

文字列の中身、真偽値、null、配列の要素の順序は変わりません。重複キーや文字列のエスケープをそのまま残す必要がある場合は、この点を確認してから使ってください。安全に整形・圧縮する手順は、ガイド「有効なJSONを安全に整形・圧縮する方法」にまとめています。

エラーになる入力

JSONとして読み取れない入力では「JSONの形式が正しくありません」と表示し、そのすぐ下に、最初に読み取れなくなった位置と原因を示します。位置はこのアプリが入力を先頭から調べて求めるので、ブラウザの種類によらず同じ表示になります。

入力:

{
  "name": "太郎",
  "age": 30,
}

表示:

3行目 12文字目: 最後の要素のあとにカンマがあります。このカンマを消してください。
3 |   "age": 30,

2行目は、エラーのある行を抜き出したものです。画面では、該当する箇所(この例では末尾のカンマ)に色と下線が付きます。行が長いときは、その箇所の前40文字と後ろ24文字までを残し、切った側に「…」を付けます。「入力欄のこの位置を選ぶ」を押すと、入力欄の同じ箇所が選択されます。

  • 行は改行で数えます。文字目は、その行の先頭から数えた文字数です。漢字やかな、タブ、行頭の空白もそれぞれ1文字と数えます
  • 示すのは最初の1か所だけです。直してからもう一度ボタンを押すと、次の箇所が示されます
  • 示す位置は「読み取れなくなった場所」で、直す場所が少し前にあることもあります。カンマが抜けているときは次の要素の先頭を、括弧を閉じ忘れているときは入力の終わりを示します

原因として見分けるのは、次のものです。

  • 最後の要素のあとのカンマ({"a":1,})。カンマそのものを示します
  • 続けて書いたカンマや、先頭のカンマ([1,,2])
  • 要素の間のカンマの抜け({"a":1 "b":2})。文字列の中の " を \" と書いていないときも、ここに当たります
  • キーのあとのコロンの抜け、コロンのあとの値の抜け({"a":})
  • 単一引用符で囲んだキーや文字列({'a':1})、引用符で囲んでいないキー({a:1})
  • // や /* */ のコメント
  • NaN、undefined、True など、JSONにない語
  • 数値として書けない形(012、+1、.5、0x1F)
  • 閉じていない文字列、文字列の途中の改行やタブ、"C:\Users" の \U のように使えない \ の組み合わせ
  • 種類の合わない括弧([1, 2})と、括弧の閉じ忘れ。どの行で開いた括弧かを合わせて示します
  • 値が終わったあとに続く文字({"a":1}{"b":2})
  • 文字列の外にある全角の記号・数字・スペース、“ ” のような半角でない引用符、ノーブレークスペースなどの見えない文字。見えない文字は、抜き出した行の中で U+00A0 のように文字コードで表示します

入力が空のままボタンを押したときは、位置を示さず、入力が空であることだけを知らせます。

メッセージの下の「技術的な詳細」を開くと、ブラウザが返したエラーの原文(英語)を確認できます。原文に位置が含まれるブラウザでは、このアプリの示す位置と違うことがあります。たとえば末尾のカンマでは、原文はその後ろの閉じ括弧を、このアプリはカンマを指します。

1e400 のように表現できる範囲を超える数値は、null に書き換えずに別のエラーとして知らせます。これは書き方の誤りではないため、位置は示しません。「数値を入力の書き方のまま残す」にチェックを入れると、エラーにならずにそのまま書き出せます。

原因の探し方は、ガイド「JSONの構文エラーを見つけて修正する方法」を参照してください。

FAQ

コメントや末尾カンマのあるJSON(JSON5、JSONC)は整形できますか?

できません。標準のJSONだけを受け付けます。コメントと末尾のカンマを取り除いてから貼り付けてください。

エラーの位置はどのブラウザでも表示されますか?

はい。位置はブラウザのエラーメッセージから読み取るのではなく、このアプリが入力を調べて求めます。エラーの位置を返さないブラウザでも、行と文字目、原因、その行の抜粋が同じように表示されます。

オブジェクトではなく、配列や文字列だけでも整形できますか?

はい。[1,2,3] のような配列や、"abc"、42、null のような単独の値も有効なJSONとして処理します。

キーをアルファベット順に並べ替えられますか?

「キーを文字コード順に並べ替える」にチェックを入れてから整形または圧縮すると、すべてのオブジェクトのキーを並べ替えます。英字の大文字が小文字より前に来るなど、辞書の順とは異なる点があります。「キーの並べ替え」の節を確認してください。チェックを入れなければ、整数の形をしたキーが先頭へ移動することを除き、入力の順序のまま出力します。

大きなIDの数値の桁が変わってしまいます。そのまま残せますか?

「数値を入力の書き方のまま残す」にチェックを入れてから整形または圧縮すると、12345678901234567890 のような桁の多い整数も入力の桁のまま書き出します。チェックを入れていないときに桁や表記が変わった数値があれば、結果の上に例を表示します。

タブでインデントできますか?

はい。「整形(タブ)」を押すと、1段につきタブ文字1つでインデントします。画面ではタブ1つを4文字分の幅で表示しますが、コピーされるのはタブ文字そのものです。貼り付け先での幅は、そのエディターの設定で決まります。

APIキーや個人情報を含むJSONを貼り付けても大丈夫ですか?

貼り付けたJSONは、ブラウザのJavaScriptだけで読み取りと書き出しを行います。サーバーへ送る通信はなく、保存もしないため、ページを再読み込みすると消えます。

JSONをYAMLやCSVに変換できますか?

このアプリではできません。JSON⇔YAML変換ツールとCSV⇔JSON変換ツールを使ってください。

種別
ユーティリティ
カテゴリ
開発者向け
タグ
json
formatter
developer
  • JSON⇔YAML変換ツール

    JSONとYAMLを相互に変換します。--- 区切りの複数ドキュメントのYAMLとJSON配列の相互変換にも対応し、設定ファイルの書式変換やデータ確認に使えます。

    ユーティリティ開発者向けjsonyamlconverterdeveloper
  • CSV⇔JSON変換ツール

    CSV(カンマ区切り)やTSV(タブ区切り)とJSONを相互に変換します。Excelやスプレッドシートの表をJSONにしたり、JSONの配列を表に戻したりできます。入れ子のJSONは address.city のような列に展開します。結果は、Excelで文字化けしないCSVファイルとしてダウンロードできます。

    ユーティリティ開発者向けcsvjsontsvconverterdeveloper
  • JWTデコーダー

    JWT(JSON Web Token)のヘッダーとペイロードをデコードして表示し、有効期限(exp)を現在の時刻と比べます。共有シークレットや公開鍵を入れれば、HS256・RS256・ES256 などの署名が一致するかも、ブラウザの中で確かめられます。

    ユーティリティ開発者向けjwtjsontokendecoderexpirationsignaturedeveloper