JSON 風テキストのよくある問題を修復

JSON 風のテキストを貼り付けると、決まった修復ルールが順番に適用され、変更点がすべて一覧表示されます。入力が実行されることはなく、送信もされません。解析できないままなら、推測ではなくパーサーのエラーとして報告します。

ブラウザ内でローカルに実行
修復処理がコードを実行することはありません。ブラウザ内で、確認可能な範囲のテキスト変換だけを適用します。
不正な JSON、または JSON に近い入力

安全のため修復範囲は意図的に限定しています

このツールは、コメント、末尾のカンマ、シングルクォート、引用符のないキー、スマートクォート、よくある非 JSON リテラルを扱います。JavaScript の実行、足りない業務データの推測、修復しきれなかった解析エラーの隠蔽は行いません。

JSON 風テキストを修復する手順

JSON 風のテキストを貼り付けると、決まった順序の修復ルール(コメント、末尾のカンマ、シングルクォート、引用符のないキー、スマートクォート、True/False/None、非有限の数値)が適用され、変更点がすべて列挙されます。推測で埋めることはしません。解析できないままなら、それらしい文書を返さずエラーとして終了します。

修復はテキスト変換と厳密な JSON.parse だけで構成され、入力を実行することはなく、作業中にページからリクエストを送ることもありません。文字列の中身は変更しません。引用符で囲んだ値の中にある http:// の URL や /* */、スマートクォートのアポストロフィはそのまま残ります。

  1. 左の欄に入力を貼り付けます。ルールは「JSON を修復」を押したときだけ実行されます。
  2. 「JSON を修復」を押します。すでに有効な入力はその旨が表示され、2 スペースのインデント付きで返ります。そうでなければ、実行された各ルールが「適用された修正」に実行順で並びます。
  3. 修正の一覧を読み、出力が意図どおりか確認します。リテラルの置換(True → true、NaN → null)は値を意図的に変えるルールです。
  4. 「コピー」で修復結果を取得します。失敗後のコピーは、まだ無効な JSON であるとステータスに表示されます。「クリア」は両方の欄と修正一覧を空にします。

修復ツールが変えるもの、変えないもの

実行されるルールと順序

BOM の削除、スマートクォートの正規化、コメントの削除、シングルクォートの変換、引用符のないキーの引用、リテラルの置換、末尾のカンマの削除がこの順序で、文字列の外側だけに適用されます。コメントは JavaScript の // と /* */、Python 形式の # 行に対応します。キーは英字・_・$ で始められ、日本語などの非 ASCII 文字も使えます。[1,,] のような連続した末尾カンマは、閉じ括弧がきれいになるまで削除されます。

ルールは文字列の中身を対象にしないため、データ内の記号は残ります。引用符で囲んだ文字列の中の http://x、/* keep */、#fff はそのまま出力され、値の中のスマートクォートのアポストロフィもそのままです。スマートクォートを変換するのは、キーや文字列の引用符として働いている箇所だけです。

推測しないこと

値の欠落や途中で切れたファイルは修復しません。{"a": }(値なし)、{"a": [1, 2(閉じていない配列)、{a: .5}(先頭の小数点)、{a: 0x1F}(16 進数)などはパーサーのエラーで終わり、途中まで変換されたテキストが確認用に表示されます。この欄は結果ではなく、「コピー」もそのように伝えます。

NaN・Infinity・-Infinity は null になります。JSON に非有限の数値の書き方がないためです。True/False/None は true/false/null になります。数値や真偽値を期待する受け取り側に渡す前に、これらの置換を確認してください。

成功しても確認が必要な理由

緑のステータスが証明するのは「今は解析できる」ことだけで、データが意図どおりだとは証明できません。重複したキーは最後の値が残り、書き換えの記録は修正一覧にしか残らず、出力は常に 2 スペースで整形し直されます。設定ファイルやテストデータを上書きする前に元のテキストと比較してください。

処理はすべてこのタブ内で完結し、修復中にページからリクエストは送られず、入力のコピーも保存されません。比較が終わるまで元のテキストは手元に残し、ページ上の作業コピーは「クリア」で消してください。

最近使ったツール: