できない.dev

JSON 整形・エラー箇所チェック

JSON を貼り付けると整形し、壊れた場所を行と列で示す。
全角スペースや末尾のカンマはまとめて直せて、各言語で書き出した形も確かめられる。
入力はブラウザの中だけで処理する。

公開:

JSON を貼り付けると、すぐに調べる

整形結果

入力欄に JSON を貼り付けると、ここに整形結果が出る。

各言語で書き出すと、こうなる

入力が無いので例を表示している。JSON を貼り付けると、その内容に置き換わる。

Python のコード
data = json.loads(source)
text = json.dumps(data, indent=2)
Python の出力
{
  "name": "\u5c71\u7530",
  "tags": [
    "api",
    "cli"
  ],
  "active": true
}

json.dumps は既定で ASCII 以外の文字を \uXXXX にする。1 行のときも , と : の後ろに空白が入る。

Python のサンプルコード全体を見る →

自分のコードで書くには

コードで同じエラーが出るときは

できないときPython「json.decoder.JSONDecodeError: Expecting value」の原因と直し方できないときcurl で JSON を POST してもサーバー側で受け取れない

見つけられる間違い

JSON.parse は最初の 1 か所で止まるが、このツールは壊れた場所をすべて行と列で示す。
次の間違いは自動で直せる。

  • 全角スペース、全角のカンマ・コロン・引用符
  • BOM やゼロ幅スペースのような見えない文字
  • 最後の要素のあとのカンマ、カンマやコロンの書き忘れ
  • シングルクォート、引用符の無いキー
  • Python の True False None、JavaScript の undefined
  • コメント、閉じていないかっこ、文字列の中の改行やタブ
  • C:\Users のようなエスケープの誤り

先頭に 0 が付いた数値のように直し方が 1 つに決まらないものは、場所だけを示して手で直してもらう。

整形しても値を変えない

JSON.parse で読み直して書き出すと、値が変わることがある。
12345678901234567890 は 12345678901234567000 になり、{"b":1,"2":2,"1":3} はキーの順番が 1 2 b に変わる。
このツールは入力を自前で読むので、整形結果の数値とキーの順番は入力のままだ。
桁が落ちる数値や同じキーの重複があれば、警告で知らせる。

言語によって書き出し方が違う

同じデータでも、書き出した結果は言語で変わる。
どれも JSON としては正しいので、差分比較やスナップショットテストで値が同じなのに一致しないときは、この違いを疑うとよい。

  • Python の json.dumps と C# の JsonSerializer は、既定で日本語を \uXXXX にする
  • Go の json.Marshal は < > & を \u003c などにする
  • Go の map と Rust の serde_json::Value は、キーを文字列の順に並べ替える
  • JavaScript は数字だけのキーを先頭へ移す
  • Java の Jackson は整形すると "name" : "山田" のようにコロンの前にも空白を入れる

「各言語で書き出すと、こうなる」の出力とコードは、実際に各言語で走らせた結果とテストで突き合わせている。

入力はサーバーに送らない

入力した JSON はブラウザの中だけで処理し、サーバーには送らない。
ページを閉じると入力は残らない。
利用回数の計測で送るのは操作の種類だけで、入力の中身は含めない。

検証環境Python 3.14.10 / Node.js 24.22.2 / Go 1.27.3 / 2026-11-02 検証(ほか 3 件)
検証日
バージョン
  • Python 3.14.10
  • Node.js 24.22.2
  • Go 1.27.3
  • Rust 1.99.1 (serde_json 1.0.154)
  • Java 21.0.13 (Jackson 2.18.2)
  • .NET SDK 8.0.426

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。