戻る

JSON 修復

フォーマット

読み込み中

ツールを読み込んでいます

ツールのコードは開いたときにのみ読み込まれます。

このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。

このツールについて

コピーした設定、API のサンプル、生成された JSON の断片を、ローカル Web Worker 内の jsonrepair 3.15.0 で修復します。欠けた区切り記号の追加、キーへの引用符の追加、単一引用符の変換、コメントや末尾カンマの除去に対応します。比較できるように元の入力と修復結果を残し、変更全体を囲む正確な区間を一つ表示します。構文の修復は推測です。解析できる結果でも、意図したデータの正しさ、欠落内容の復元、スキーマへの適合は保証されません。コピーやダウンロードの前に必ず確認してください。

主な用途

  • コメント、単一引用符、引用符のないキーを含む小さな設定を、厳密な JSON が必要な用途に整える。
  • 途切れたレスポンスに追加される引用符や括弧を確認し、必要に応じて提供元から完全なデータを取得する。
  • AI が生成した JSON の断片を、原文を上書きせず修復案と比較する。
  • 大きな整数の識別子、小数、指数の表記を保ちながら、周囲の区切り記号を修復する。
  • JSONP のラッパー、コードフェンス、行区切りレコードの変換が用途に合うか確認する。

使い方

  1. 1.元のテキストを貼り付けるか、サンプルを読み込みます。入力上限は UTF-8 で 200,000 バイトです。 JSON の修復を実行します。ローカルワーカーが制限内で処理します。不要になった場合はキャンセルできます。
  2. 2.警告を読み、元の入力と修復結果を比較します。既に有効な JSON は、安全性チェックを通過すれば入力どおりに返されます。 変更区間を確認します。位置は 0 始まりの UTF-16 コード単位で、終了位置は含みません。絵文字は 2 単位の場合があります。複数の変更の間にある未変更のテキストも区間に含まれます。
  3. 3.確認済みのチェックボックスをオンにするとコピーとダウンロードが有効になります。確認した修復結果をコピーまたはダウンロードします。入力を編集すると前の結果は無効になるため、出力前に再実行してください。

実行可能な入力と出力の例

コメントと末尾カンマを除去

{
  // copied config
  "name": "Ada",
  "enabled": true,
}
{
  
  "name": "Ada",
  "enabled": true
}

コメントと最後のカンマを除去します。空行と残りの書式は表示どおりの実際の結果です。出力を再整形しません。

キーと単一引用符の文字列を修正

{name: 'Ada', city: '東京'}
{"name": "Ada", "city": "東京"}

キーと文字列を JSON の二重引用符に変換します。日本語は保持されます。JavaScript のオブジェクトリテラルは実行しません。

欠けたカンマを追加

{"a": 1 "b": 2}
{"a": 1, "b": 2}

プロパティ間にカンマを追加します。本来二つの独立したフィールドでよいか確認してください。

途切れた入れ子を閉じる

{"user":{"name":"Ada","roles":["reader","editor"
{"user":{"name":"Ada","roles":["reader","editor"]}}

閉じる記号だけを補います。切り落とされた可能性のある他の役割やフィールドは復元しません。

途切れた文字列を閉じる

{"message":"Hello
{"message":"Hello"}

修復案は "Hello" ですが、本来の文はもっと長かったかもしれません。復元済みデータと考えず、途切れ方を確認してください。

修復中も数値表記を保持

{id: 9007199254740993, price: 1.2300, small: 1e-400, sign: -0,}
{"id": 9007199254740993, "price": 1.2300, "small": 1e-400, "sign": -0}

大きな整数、小数末尾のゼロ、指数、負のゼロを正確なテキストとして保持します。後続の JavaScript パーサーでは精度を失う場合があります。

有効な JSON はそのまま返す

{
  "id": 9007199254740993,
  "price": 1.2300,
  "small": 1e-400,
  "sign": -0,
  "escaped": "\u0061"
}
{
  "id": 9007199254740993,
  "price": 1.2300,
  "small": 1e-400,
  "sign": -0,
  "escaped": "\u0061"
}

字下げ、数値トークン、バックスラッシュ u エスケープを含め、出力は入力と同一です。変更区間は不要です。

Markdown コードフェンスを除去

```json
{"ready": true,}
```
{"ready": true}

フェンスと末尾カンマを除去します。表示された出力の先頭と末尾の改行も実際の修復テキストの一部です。

実行せず JSONP ラッパーを外す

callback({"ok":true});
{"ok":true}

コールバック名、括弧、セミコロンをテキストとして除去します。呼び出しは行いません。内部の値の抽出が意図に合うか確認してください。

Python 形式の定数を変換

{'active': True, 'deleted': False, 'value': None}
{"active": true, "deleted": false, "value": null}

True、False、None を true、false、null に変換し、単一引用符も修正します。Python を実行せず、テキストの修復案を作ります。

行区切りレコードを配列にする

{"id":1}
{"id":2}
[
{"id":1},
{"id":2}
]

二つのレコードを一つの JSON 配列にします。この構造変更を確認してください。行単位の用途には JSON Lines ツールがあります。

曖昧な裸の単語を確認

{"state": pending}
{"state": "pending"}

pending を文字列と推測します。欠落値、識別子、別の状態などが本来の意図かどうかは判断できません。

UTF-16 で位置を数える

{"emoji":"😀", unquoted: true,}
{"emoji":"😀", "unquoted": true}

絵文字は変わらず、UTF-16 コード単位では 2 単位です。変更区間はその後から始まります。位置をバイト数と解釈しないでください。

デコード後の重複キーを拒否

{"a":1,"\u0061":2}
{
  "error": "duplicate"
}

診断コードのみを示しており、修復出力はありません。二つのキーはどちらも a にデコードされるため、値の選択には明示的な判断が必要です。

指数の推測を拒否

{"value":1e}
{
  "error": "numericChange"
}

診断コードのみを示しており、修復出力はありません。1e を 1e0 に補完すると数値トークンの一部を新たに作るため、この修復案は拒否されます。

欠落値を null とする修復案

{"value":}
{"value":null}

ライブラリは欠けた値に null を提案します。元の値を復元したのではなく、新たな仮の値です。採用する前に提供元を確認してください。

連続するカンマで配列の入れ子が変わる例

[1,,2]
[
[1],2
]

この曖昧な入力には、[1] と 2 を含む外側の配列が提案されます。改行も表示どおりです。カンマの重複を取り除くだけでも、欠けた要素を補うだけでもありません。本来の構造は不明なため、採用前に入れ子を確認して修正してください。

よくあるエラーと確認事項

  • 重複キーは同じ名前の異なるエスケープ表記でも発生します。正しい値を確認してから、競合するプロパティを削除または変更してください。
  • 数値変更エラーは保護のための動作です。推測された指数や小数を正しいと決めつけず、提供元に基づいて数値を直してください。
  • 空白だけの入力も空入力エラーになります。JSON の値か JSON に似た断片を貼り付けてください。
  • 上限は見た目の文字数ではなく UTF-8 バイト数です。日本語、中国語、絵文字は ASCII より早く上限に達する場合があります。
  • 修復が終わる前に深さのエラーになる場合があります。同じ文書を繰り返し試すより、過剰な入れ子を減らしてください。
  • 構文エラーは修復ライブラリが受け入れ可能な結果を作れなかったことを示します。対応しない括弧、不正なエスケープ、周囲の余分な文字を確認してください。
  • 途切れた文字列の修復に成功しても、文字列が完全とは限りません。提供元のデータと照合してください。
  • 広い変更区間には複数の変更とその間の未変更テキストが含まれます。編集回数を示すものではありません。
  • タイムアウトやキャンセル後は出力できる結果がありません。小さな断片で試し、省略した文脈も確認してください。
  • 生の不正な Unicode は UTF-8 として忠実に出力できません。提供元で修正し、文字としてのバックスラッシュ u エスケープと混同しないでください。

制限と注意事項

  • 入力は UTF-8 で 200,000 バイト、出力は 500,000 バイト、入れ子は 64 階層までです。ブラウザーは 5 秒経過した修復ワーカーを終了します。ストリーミングや大容量ファイル用のツールではありません。 生の UTF-16 に含まれる対になっていないサロゲートは拒否します。UTF-8 ダウンロード時に別の文字へ置き換わるためです。既にエスケープされた "\uD800" などはテキストとして保持しますが、後続システムでの Unicode 処理は異なる場合があります。
  • 構文修復では、欠落したレコードの復元、業務上の意味の推定、API データの正しさの証明はできません。閉じ引用符を追加した文字列でも内容は不完全な場合があります。 完全な JSON5 パーサー、スキーマ検証器、汎用 JavaScript インタープリターではありません。対応できない不正な入力では修復結果を出力しません。 不明または不完全なエスケープ、undefined、省略記号、[2/3]、[true&&false]、{x:true?false:null} などの JavaScript 式は修復対象外です。 欠落した値が null で補われる場合があります。これは推測した仮の値であり、復元したデータではありません。
  • 同じオブジェクト内でデコード後に重複するキーは拒否します。"a" と "\u0061" も該当します。最後の値を黙って採用しません。別のオブジェクトにある同名キーは許可します。 修復前後の数値トークン表記を比較します。数値の変更、挿入、削除を伴う修復案は拒否します。01、0x10、.5、1.、未完成の 1e などが例です。 9007199254740993、1.2300、1e-400、-0 などの有効な数値表記はテキストのまま保持します。後続の JavaScript パーサーや別の整形ツールでは丸めや表記変更が起こり得ます。
  • 差分は共通の接頭部と接尾部から求めた、変更全体を囲む最小の一区間です。個別の編集一覧や JSON の意味的な差分ではありません。区間内の未変更テキストも含みます。
  • JSONP ラッパーやコードフェンスの除去、Python 定数の変換、NDJSON の配列化、裸の単語への引用符追加は解釈を変える場合があります。作者の意図を示すものではなく、確認が必要な修復案です。 JavaScript や JSONP コールバックの実行、URL の解決、ネットワーク経由の取得、入力のブラウザーストレージへの保存は行いません。コピーとダウンロードは明示的な操作時のみ実行します。

よくある質問

すべてのデータの復元や API 内容の検証もできますか?

できません。閉じ括弧や文字列の区切りを補える場合はありますが、欠落したバイト、レコード、値は復元できません。元の情報と修復案を照合し、正確さが必要な場合は完全なレスポンスを取得してください。 いいえ。修復案が本ツールの構文と安全性のチェックを通過したことだけを意味します。必須フィールド、型、範囲、業務ルールは別途検証が必要です。スキーマがある場合は JSON Schema 検証ツールを利用してください。

重複キー、大きな数値、数値の修復はどう扱いますか?

有効でチェックを通過した JSON は同じテキストとして返します。修復時も数値表記を比較して保持し、数値を解析して再シリアライズする方法で出力を作りません。周囲の構文、コメント、空白は変わる場合があります。別のパーサーに渡す前に正確な出力を確認してください。 重複するメンバー名の扱いは処理系で異なり、最後の値だけを残すものもあります。本ツールはキーのエスケープをデコードして重複を拒否するため、{"a":1,"\u0061":2} は受け付けません。採用する値は利用者が判断してください。 .5 を 0.5 に変えたり、1e を 1e0 と補完したりすると数値トークンが変わります。本ツールは推測や文字列への暗黙変換をせず、数値トークンを変更する修復案を拒否します。

変更区間の位置は何を表しますか?

0 から数えた UTF-16 コード単位で、終了位置は区間に含みません。一般的な絵文字は 2 単位です。一つの区間ですべての変更を囲むため、変更の間にある未変更の文字も区間に表示される場合があります。

コード実行、入力のアップロード、保存は行いますか?

コードは実行しません。修復ライブラリは JSONP コールバックのラッパーを除去し、True、False、None を JSON リテラルへ書き換えられます。ただし JSON の構文だけでは必要な意味を決められないため、これらのテキスト変換も確認が必要です。 現在のページのメモリーに置かれ、結果と比較できる状態で保持されます。修復処理ではローカルワーカーだけに渡し、通信、コード評価、ブラウザーストレージへの書き込みは行いません。クリアすると現在の入力と結果を取り除きます。

関連ツール