JSON 整形・構文チェック
JSON をブラウザで整形・圧縮・構文チェック。エラーは行・列と原因を日本語で表示し、全角の記号や空白も指摘。大きな数値はそのまま残し、重複キーやコメント付き JSONC も扱えます。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
例:気象庁の天気予報 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.1 | Python 3.12 | JSON.parse → stringify |
|---|---|---|---|---|
1.0 | 1.0 | 1.0 | 1.0 | 1 |
1e2 | 1e2 | 1E+2 | 100.0 | 100 |
12345678901234567890 | そのまま | そのまま | そのまま | 12345678901234567000 |
1e400 | そのまま | 1E+400 | Infinity(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 秒かかりました。