JSON 整形・構文チェック

JSON をブラウザで整形・圧縮・構文チェック。エラーは行・列と原因を日本語で表示し、全角の記号や空白も指摘。大きな数値はそのまま残し、重複キーやコメント付き JSONC も扱えます。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
すべての階層でキーを Unicode のコードポイント順に並べます。jq -S、python3 -m json.tool --sort-keys と同じ順序です。 U+007E より後の文字をすべて \uXXXX で書きます。python3 -m json.tool の既定と同じです。 JSON5(JSONC の上位互換。VS Code の settings.json など)として読みます:コメント、末尾のカンマ、シングルクォート、クォートのないキー、16 進数、.5。出力は常に JSON です。NaN と Infinity は JSON で表せないためエラーのままです。 JSON.parse はすべての数値を 64 ビット倍精度で持ちます。2^53 − 1(9,007,199,254,740,991)を超える整数は桁が落ち、1.0 は 1、1e400 は Infinity になります。「書かれたとおり」は数字をそのまま写し、JavaScript で変わる数値を一覧にします。「JavaScript が読む値」はスクリプトが受け取る値を表示します。 RFC 8259 はキー名が一意であるべき(SHOULD)とし、重複の扱いはパーサーごとに違います。「すべて残す」はすべて残して位置を示し、「最後だけ残す」は JSON.parse・jq・Python と同じく、最後の値を最初の位置に置きます。

JSON を貼り付けるかファイルを開いてください。

JSON を貼り付けるか、ファイルをツールにドロップするか、「ファイルを開く」を押します(上限 50 MB)。2 MB までは入力に合わせて整形し、それを超えると「整形」を押します。解析は Web Worker で動くため、ページは固まりません。入力はこのブラウザのローカルストレージに残り、「クリア」で消えます。アップロードはしません。
出力 値は変わりません。空白は変わり、文字列のエスケープは JSON.stringify と同じ書き方になります(\u00e9 は é、\/ は /)。1 MB を超える出力は先頭 1 MB だけを色分けなしで表示し、「コピー」「ダウンロード」には全体が入ります。構文だけを確認し、構造は確認しません。必須項目や型は JSON Schema 検証ツールで確認してください。
ツリーではオブジェクトと配列を折りたため、子要素を 200 件ずつ表示します。行を選ぶと JSON Pointer(/items/0/price)と jq のパス(.items[0].price)をコピーできます。「すべて展開」は 2,000 行で止まります。
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

例:気象庁の天気予報 JSON を整形する

気象庁ウェブサイトの天気予報ページは、地域ごとの予報を 1 行の JSON で読み込んでいます(東京都は https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json)。2026-10-02 11 時発表分から一部を抜き出して整形します。

{"publishingOffice":"気象庁","reportDatetime":"2026-10-02T11:00:00+09:00","area":{"name":"東京地方","code":"130010"},"weathers":["雨 昼過ぎ から くもり","晴れ 朝晩 くもり"],"waves":["0.5メートル","0.5メートル"]}

スペース 2 で整形した結果:

{
  "publishingOffice": "気象庁",
  "reportDatetime": "2026-10-02T11:00:00+09:00",
  "area": {
    "name": "東京地方",
    "code": "130010"
  },
  "weathers": [
    "雨 昼過ぎ から くもり",
    "晴れ 朝晩 くもり"
  ],
  "waves": [
    "0.5メートル",
    "0.5メートル"
  ]
}

文字列の中の全角スペースや「0.5」は値の一部なので、そのまま残ります。エラーになるのは、文字列の外にある全角文字だけです。

全角の記号・空白のエラー

日本語入力のまま打った全角スペース(U+3000)、全角コロン、かぎかっこは JSON の記号として使えません。次の例では、カンマの後に全角スペースが入っています。

{"name":"東京", "code":"130010"}

ステータス行は「1 行 14 列:全角文字   があります。JSON の記号と空白は半角です」となり、出力欄に位置が表示されます。

1 | {"name":"東京", "code":"130010"}
  |              ^

全角スペースは見た目では半角と区別しにくいため、列番号で確認してください。なお JSON5 は U+3000 を空白として認めているので、「JSON5 / JSONC を受け付ける」をオンにすると空白として読み飛ばし、注記に「JSON で使えない空白文字 1 個」と表示します。

主なエラーと表示:

入力表示
{"a":1,}閉じかっこの前に余分なカンマがあります
{"a":1}全角文字 : があります。JSON の記号と空白は半角です
{"a":「b」}「 は全角の引用符です。半角のダブルクォート(“)を使ってください
{'a':1}JSON の文字列とプロパティ名はダブルクォート(“)で囲みます
{"a":1} // メモJSON にコメントは書けません

JSON に近い入力には、ワンクリックの修正が出ます。Markdown のコードブロック(```)に入った JSON(チャット AI の回答によくある形)、文字列としてエスケープされた JSON(ログに残る {\"a\":1})、JSON を中に持つ 1 つの文字列です。1 行に 1 つずつ値が並ぶ JSON Lines には JSONL コンバーターへのリンクを表示します。

Shift_JIS のファイル

RFC 8259 8.1 節は、やり取りする JSON に UTF-8 を求めています。Shift_JIS で保存したファイルでは「東京」が 93 8C 8B 9E の 4 バイトになり、UTF-8 としては不正です。このツールで開くと「ファイルが UTF-8 ではありません:N バイト目から不正なバイト列です」と表示し、文字化けしたまま整形することはありません。UTF-8 で保存し直してください。BOM 付き UTF-16 は変換して読み込み、その旨を表示します。先頭の BOM(U+FEFF)は取り除きます(JSON.parse は BOM をエラーにします)。

python3 -m json.tool との違い

python3 -m json.tool は既定で ASCII 以外を \uXXXX に変換するため、日本語が読めなくなります(--no-ensure-ascii で抑止できます)。このツールは既定で日本語をそのまま出し、「非 ASCII をエスケープ」をオンにしてスペース 4 にすると、Python 3.12 と同じ出力になります。

{"area":{"name":"東京地方","code":"130010"}}

出力(Python と 1 バイトも違いません):

{
    "area": {
        "name": "\u6771\u4eac\u5730\u65b9",
        "code": "130010"
    }
}

数値の扱いはツールごとに違います。

入力このツールjq 1.7.1Python 3.12JSON.parse → stringify
1.01.01.01.01
1e21e21E+2100.0100
12345678901234567890そのままそのままそのまま12345678901234567000
1e400そのまま1E+400Infinity(JSON として不正)null

19 桁の ID のように 2^53 − 1 を超える整数は、JSON.parse で読むと値が変わります。RFC 8259 6 節も、倍精度浮点数で読むソフトウェアとの間では −(2^53 − 1)〜2^53 − 1 の整数しか確実にやり取りできないとしています。このツールは数値を書かれたとおりに出力し、JavaScript で変わる数値を注記に列挙します。「数値」を「JavaScript が読む値」にすると、ブラウザのコードが受け取る値で出力します。テストでは毎回、乱数で作った 400 件の文書を jq 1.7.1、120 件を Python 3.12 と照合しています(バージョンが違う環境では省略)。

ほかの整形ツールとの比較

2026-10-02 にデスクトップ版 Chromium で {"id":12345678901234567890,"price":19.90,"big":1e400,"z":-0,"a":1,"a":2} などを入力して確認しました。どのサイトも、テスト中に JSON をサーバーへ送信していませんでした。

  • JSONきれい(tools.m-bsys.com、Bing で「json 整形」1 位):出力は 12345678901234567000、19.9、null、0 になり、重複した a は 2 だけが残ります。注意表示はありません。{"a":1,} やコメント付きの入力もエラーにならず整形されるため、JSON として不正なことに気づけません。
  • jsonformatter.org:数値と重複キーは同じように書き換わります。末尾カンマには「Expecting ‘STRING’, got ’}‘」と英語で表示されます。
  • このツール:数値はそのまま出力して変わる値を注記し、重複キーはすべて残して位置を示します。JSON ではない入力はエラーにし、JSON5 / JSONC として読めるときだけ変換を提案します。

FAQ

JSON はサーバーに送信されますか?

送信されません。解析も整形もブラウザのタブの中で行います。入力はこのブラウザのローカルストレージに保存され、次に開いたときに残っています。「クリア」で消えます。

日本語が \u6771\u4eac のようになってしまうのはなぜですか?

python3 -m json.tool など一部のツールは、既定で ASCII 以外の文字を \uXXXX に変換します。このツールは既定で日本語をそのまま出力します。ASCII だけにしたいときは「非 ASCII をエスケープ」をオンにしてください。

コメント付きの JSON(JSONC)は整形できますか?

できます。「JSON5 / JSONC を受け付ける」をオンにするか、エラー表示の「JSON に変換」を押してください。コメントは削除され、末尾のカンマ・シングルクォート・クォートのないキーは書き換えられます。変更の種類と数は注記に出ます。NaN と Infinity は JSON で表せないためエラーのままです。

整形でデータは変わりますか?

値は変わりません。変わるのは空白と文字列のエスケープの書き方で、JSON.stringify と同じく \u6771 は「東」、\/ は / になります。数値と重複キーは既定で書かれたとおりに残します。

どのくらいのサイズまで扱えますか?

50 MB までのファイルを開けます。2 MB までは入力に合わせて整形し、それより大きいときは「整形」を押すと処理します。解析と整形は Web Worker で行うため、処理中もページを操作できます。入力を変える、もう一度「整形」を押す、「クリア」を押すと前の処理は止まります。当サイトのテスト(Apple M1 Max、Chromium 152、2026-10-03)では、10.7 MB のファイルの整形に 2~4 秒かかり、その量のテキストを入力欄に入れるだけでブラウザーが 1~2 秒かかりました。