JSON 修復
無料オンラインJSON修復ツール。末尾カンマ、シングルクォート、引用符なしキー、括弧未閉じ、コメント、Markdownラッパーなど一般的な構文エラーを自動検出・修正。AI出力クリーンアップと破損JSON復元向けに設計。全処理をブラウザローカルで実行。
関連おすすめ
JSON修復(JSON Repair)とは?
JSON修復(JSON Repair)とは、構文エラーにより厳密なJSONパーサーで処理できない非標準JSONテキストを、RFC 8259に準拠した合法的なJSON文字列に自動復元するプロセスです。「JSONフォーマット(Beautify)」とは異なり、JSON修復が扱うのはフォーマットの差異ではなく構造的エラーです。末尾カンマ、シングルクォート、引用符不足、未閉じ括弧、Markdownラッパー、コメントなど、いずれもJSON.parse()が直接SyntaxErrorをスローする原因ですが、実際の開発では極めて頻繁に発生します。
実際のエンジニアリング現場でJSONが「非標準」になる原因は高度に集中しています:① ChatGPT / Claude / GeminiなどのLLMからコピーする際、出力がMarkdownコードブロック(```json ... ```)でラップされたり説明文が付与されたりする;② JavaScriptオブジェクトのconsole.log()からコピーすると末尾カンマやシングルクォートが混入する;③ 設定ファイルではJSON5 / JSONC拡張構文(コメント、引用符なしキー、複数行文字列など)がよく使われる;④ ストリーミングレスポンスやログ切り捨てによりJSONが途中で切れ、末尾の`}`や`"`が欠落する。JSON修復ツールは入力テキストをスキャンし、これらの典型的な問題を特定して「最小侵襲」の原則で標準JSONに復元し、元のデータ意味を可能な限り保持します。
実装レベルでは、JSON修復は通常2段階で構成されます:① 許容解析(tolerant parse)— 正規表現ではなく状態機械ベースのスキャナで文字ストリームを段階的に処理し、「文字列内」と「文字列外」の構文文字を区別する;② 正規化出力(canonical output)— `JSON.parse` + `JSON.stringify`で再生成し、出力があらゆる下流の厳密パーサーに対して100%合法的であることを保証する。GeekFormatのJSON修復ツールは修復フロー全体をブラウザローカルで完結させ、元の内容を一切サーバーに送信しないため、機密情報を含むAPIレスポンス、内部設定ファイル、AIモデル出力の処理に適しています。
ユースケース
- AI/LLM出力クリーンアップ:ChatGPT/Claudeが返すMarkdownラッパー、説明文、末尾カンマ付きJSONをワンクリックで標準JSONに変換
- APIデバッグとトラブルシューティング:ゲートウェイやネットワーク問題でAPIレスポンスが切り捨てられた場合、括弧と文字列を素早く補完して元のデータ構造を特定
- JavaScriptからコピーしたオブジェクトリテラル:シングルクォート、末尾カンマ、引用符なしキー名をワンストップで修正
- 設定ファイルクリーンアップ:JSON5/JSONCのコメントを除去して標準JSONを取得し、下流サービスへの統一的な接続を容易に
- ログとクリップボードデータ修復:コメント、特殊空白、切り捨てを含むJSON断片を素早く標準化
- データ移行とスクリプト前処理:データ移行パイプラインに修復ステップを追加し、少数の不正JSONがETLバッチ全体をブロックするのを防止
使い方
- エラー、Markdownラッパー付き、または破損したJSON内容を左側の入力ボックスに貼り付けるか、「サンプル」をクリックして典型的な破損JSONを読み込むか、.json/.txtファイルをアップロードします
- ツールが自動的に一般的な構文問題を検出・修正し、右側の出力エリアにフォーマット済みの標準JSONと各種類の問題の修復数を表示します
- 赤いエラーメッセージが残っている場合は、入力エリアで手動編集してから修復を再トリガーできます(Mac: ⌘+Shift+R、Windows: Ctrl+Shift+R)
- 構造が正しいことを確認したら、「コピー」をクリックして修復結果をクリップボードに入れるか、「ダウンロード」をクリックしてrepaired.jsonとして保存し、フォーマットや検証などの後続処理に進みます
特徴
- 7種類の一般的な構文エラーに対応:末尾カンマ、シングルクォート、引用符なしキー、未閉じ文字列、コメント、括弧不足、Markdownコードブロックラッパー
- AI出力クリーンアップ最適化:```json ラッパーとコードブロック外の説明文を自動除去、ChatGPT、Claude、GeminiなどLLMの典型的な出力を認識
- JSON5/JSONC互換:コメント、緩い引用符、特殊空白(不可視Unicode文字など)を含む拡張構文も解析可能
- 破損JSONスマート補完:APIレスポンスの切り捨てやコピー内容の末尾括弧欠落に対応し、欠落した括弧と引用符を自動補完
- 修復問題の可視化:各種類の問題が修復された回数を自動集計・表示し、監査と人手確認を容易に
- ローカル処理でプライバシー保護:解析、修復、フォーマットはすべてブラウザ内で完結、入力内容は一切サーバーに送信されない
- フォーマットとのシームレス連携:修復後の標準JSONはワンクリックでJSONフォーマット、Schema検証、コード生成などの後続処理に進める
- ファイルとサンプルの読み込み:.json/.txtファイルのアップロードまたはサンプル読み込みクリックに対応し、修復効果を素早く検証可能
コード例
jsonrepair JavaScript ライブラリを使用したプログラム修復
javascript// npm install jsonrepair
import { jsonrepair } from 'jsonrepair';
const broken = `{
name: 'Alice',
age: 30,
tags: ['dev', 'writer',], // trailing comma + comment
}`;
try {
const fixed = jsonrepair(broken);
const obj = JSON.parse(fixed);
console.log(obj);
// => { name: 'Alice', age: 30, tags: ['dev', 'writer'] }
} catch (err) {
console.error('Still unrepairable:', err.message);
}jsonrepair Python ライブラリを使用したプログラム修復
python# pip install jsonrepair
from jsonrepair import jsonrepair
import json
broken = '''{
name: "Alice",
age: 30,
tags: ["dev", "writer",], // trailing comma + comment
}'''
fixed = jsonrepair(broken)
obj = json.loads(fixed)
print(obj)
# => {'name': 'Alice', 'age': 30, 'tags': ['dev', 'writer']}jq + sed を使用した簡易的な末尾カンマ修正(応急処置のみ)
bash# オブジェクト/配列の末尾カンマを除去(応急処置。コメント/シングルクォートは非対応) # 複雑なシナリオでは jsonrepair などの専用ライブラリを使用してください sed -E 's/,([ \t]*[}\]])/\1/g' broken.json > clean.json # 修復結果を検証 jq . clean.json >/dev/null && echo 'JSON is valid'
よくある質問
JSON修復とJSONフォーマットの違いは何ですか?
JSONフォーマットは内容自体が合法で、インデントや空白のみが不整合なJSONを再整形するだけです。一方、JSON修復は構文エラーのあるJSONを専門に処理し、末尾カンマ、シングルクォート、コメント、括弧不足などの構造的問題を先に修正してから標準フォーマットを出力します。フォーマットツールがSyntaxErrorを出す場合は、まずJSON修復を使用してください。
ツールはどのような一般的なJSON構文エラーを修正できますか?
ツールにはインテリジェントな修復アルゴリズムが組み込まれており、以下の高頻度問題を処理できます:1) 末尾カンマ(Trailing comma);2) ダブルクォートの代わりにシングルクォート;3) 引用符なしキー名;4) 文字列未閉じ;5) JavaScriptの行/ブロックコメント;6) MarkdownコードブロックでラップされたJSON;7) 末尾欠落による中括弧/角括弧の不足。
AIやLLMが出力するJSONが標準的でないことが多いのはなぜですか?
大規模言語モデル(ChatGPT、Claude、Geminiなど)が生成するJSONには、Markdownラッパー(```json ... ```)、説明的な前置き/後書きテキスト、末尾カンマ、コメント、またはトークン切り捨てによる不完全な構造が頻繁に混入します。JSON修復はこれらのシナリオ向けに最適化され、AI出力をワンクリックで合法JSONにクリーンアップします。
修復後のJSONは構造的に元のデータと常に一致しますか?
修復後の出力はJSON標準に準拠した合法的な文字列であり、データの意味は大多数のケースで保持されます。ただし、修復はヒューリスティックルールに基づいているため、極端に破損または曖昧なシナリオ(例:同一行内にカンマ欠落が複数箇所ある場合)では、元の意図とわずかにずれる可能性があります。重要なデータにはSchema検証や人手確認を推奨します。
Pythonのjson.loadsやJavaScriptのJSON.parseを直接使ってはいけないのですか?
ネイティブパーサーはSyntaxError発生時にエラーを返すだけで修復はできません。JSON修復はネイティブパーサーの前に位置する許容層です:まずテキストの修復を試み、その後ネイティブパーサーに渡すことで、最終出力が厳密なJSONパーサーで処理可能であることを保証します。本番環境でもサーバーサイドで同じ考え方で前処理を行えます。
JSON5 / JSONCのコメントは保持されますか?
保持されません。コメントはJSON5拡張構文の一部であり標準JSONには含まれないため、ツールは標準JSON準拠を保証するためにコメントを除去します。コメントを保持したい場合はJSON5ソースファイルまたはJSONCツールチェーンを引き続き使用してください。JSON5を標準JSONに変換する必要がある場合は、本ツールで直接実行できます。
切り捨てられたJSON(ストリーミング出力が途中で切れた場合など)は修復できますか?
可能です。ツールは欠落した右括弧、角括弧、文字列終了引用符のマッチングを試み、認識済みの内容を可能な限り保持します。注意:切り捨て位置が文字列リテラル内部にある場合、重要な文字を手動で補完する必要がある場合があります。
修復後にデータが失われることはありますか?
一般的な修復シナリオ(末尾カンマの除去、引用符の追加、括弧の補完、コメントの除去)では、データの意味は完全に保持されます。ごく稀に、元の内容に不可逆的な曖昧さがある場合(例:ネストレベルが破壊されている場合)、ツールは可能な限り保守的に修復し元の状態を維持します。フィールドやキーを能動的に削除することはありません。
複数のJSONを一括修復できますか?
本ツールは単一入力ごとの修復に対応しています。一括処理のシナリオでは、まずローカルでスクリプト(Pythonのjsonrepairライブラリ、josdejong/jsonrepair npmパッケージなど)を使用して基盤アルゴリズムを呼び出し、その結果を本ツールにインポートして人手検証とフォーマットを行うことを推奨します。
修復後にフォーマットとSchema検証をさらに行う必要がありますか?
推奨します。修復は主に構文レベルのエラーを解決し、フォーマットとSchema検証は可読性とビジネス正確性を保証します。修復ツールの出力はGeekFormatのJSONフォーマット、Schema検証、コード生成などのツールとシームレスに連携します。
ツールは私のJSONをサーバーにアップロードしますか?
いいえ。すべての解析、修復、フォーマットはブラウザローカルで実行され、入力も中間結果も一切サーバーに送信されません。オフラインで使用可能で、機密情報(本番環境のAPIレスポンス、内部設定など)を含むJSONの処理に適しています。
毎回使用する修復戦略を固定できますか?
本ツールは成功率を最大化するためにデフォルトで全般的な修復ルールを有効にしています。特定の言語/チームの規約に合わせて詳細に制御する必要がある場合は、本番環境でjsonrepairライブラリを使用し、必要に応じて特定のルールを有効/無効にしてください。本ツールの出力は後続検証の標準化入力としても使用できます。
トラブルシューティング
「このJSONを修復できません」エラー
原因:入力テキストに深刻な構造的破損があります(複数箇所の括弧欠落、文字列リテラルの切り捨て、文字セット破損など)。解決方法:まずプレーンテキストエディタで元ファイルを開き、エンコーディングがBOMなしUTF-8であり、圧縮バイナリでないことを確認してください。データがAPIレスポンス由来の場合は上流に補完を依頼してください。極端に破損したデータセットは元ファイルを直接使用してください。
修復後にフィールドが誤った位置に移動した
原因:元テキストのコメントや文字列リテラル内にJSON構文文字(//、/*、} など)が含まれており、パーサーが誤判定したか、ネストレベルが深すぎて括弧マッチングがずれた可能性があります。解決方法:文字列内の//、/* を手動でバックスラッシュエスケープしてください。深いネストのデータは、外側に一時的な括弧や改行を追加してから修復してください。
AI出力に含まれる説明文が除去されない
原因:AI出力は自然言語で始まる/終わることが多く(例:「以下が結果です:」)、複数行にまたがる場合があります。解決方法:テキストエディタでJSONブロック外のテキストを削除し、最も外側の```jsonラッパー内の内容のみを保持してください。ツールがそれでも認識できない場合は、手動で最も外側の { } を追加してから修復してください。
修復後にサイズが変わらない、または一部の文字が置換された
原因:元テキストにバックスラッシュ、Unicodeエスケープ、またはHTMLエンティティが含まれており、ツールがJSONルールに従って再エスケープしました。解決方法:元テキストがJS文字列内にネストされていないか確認してください。HTMLページ内にある場合は先にHTMLデコードしてください。エスケープ後に文字が増えるのは正常な現象です。
ブラウザが「メモリ不足」と表示するか、ページがフリーズする
原因:単一入力が5~10MBを超えるとブラウザに大きなメモリ負荷がかかります。解決方法:データを複数の小さなバッチ(各1~2MB)に分割するか、サーバーサイドでjsonrepairライブラリを使用してストリーミング処理してください。修復結果と元の内容のわずかな差は正常です。
修復後もSchema検証でエラーが報告される
原因:JSON修復は構文レベルのエラーのみを解決し、ビジネスフィールド名、型、値がSchemaに準拠しているかは関与しません。解決方法:GeekFormatのJSON Schema検証ツールを使用してフィールド制約を確認し、エラーに基づいて具体的なフィールドを特定して手動修正してください。
用語集
- JSON
- JavaScript Object Notation。RFC 8259で定義されたキーバリューベースの軽量データ交換フォーマット。REST API、設定ファイル、ログのデファクトスタンダード。
- RFC 8259
- IETFが発行したJSON公式仕様。合法的なJSONの厳密な構文を定義——すべてのキーはダブルクォートで囲み、文字列内でエスケープが必要な文字は限定的で、コメントと末尾カンマは許可されない。
- JSON.parse
- JavaScript / モダンブラウザに組み込まれた厳密なJSONパーサー。RFC 8259に準拠し、構文エラーが発生すると直接SyntaxErrorをスローし、許容修復はできない。
- JSON5
- JSONの拡張構文(非標準)。引用符なしキー、シングルクォート文字列、コメント(// と /* */)、末尾カンマ、16進数などを許可。人間の手書きには適するがJSON.parseとは互換性がない。
- JSONC
- JSON with Comments。VS Codeなどのエディタがコメント付きJSON設定ファイル(tsconfig.jsonなど)を指す総称。実質的にJSON5の一般的な別名。
- Trailing Comma / 末尾カンマ
- オブジェクトや配列の最後の要素の後にある余分なカンマ。JavaScriptでは許可されるがJSON標準では禁止。LLM出力やconsole.log()コピーで最も一般的な構文エラー。
- Markdown コードブロック
- 3つのバッククォート(```)で囲まれたコードスニペット。LLMはJSONを出力する際に自動で```json ... ```でラップすることが多く、そのままJSON.parse()に貼り付けると失敗する。
- Tolerant Parser / 許容解析
- 構文エラー発生時に回復を試みて解析を続行できるパーサー。JSON修復ツールの中核エンジンであり、厳密なJSON.parseとは区別される。
- SyntaxError
- JavaScriptがスローする構文エラー例外。厳密なJSONパーサーはRFC 8259に準拠しない入力を受け取ると常にこのエラーをスローする。
- Canonical JSON / 正規化JSON
- parse + stringifyで再生成されたJSON。キー順序が安定し、余分な空白がなく、標準パーサーと100%互換。JSON修復ツールの最終出力形式。
JSON修復の一般的なエラータイプと例
| エラーカテゴリ | 修復前 | 修復後 | 修復方法 |
|---|---|---|---|
| 末尾カンマ | { "a": 1, } | { "a": 1 } | 最後の要素の後ろのカンマを削除 |
| シングルクォート | { 'a': 1 } | { "a": 1 } | すべてのシングルクォートをダブルクォートに置換 |
| 引用符なしキー | { a: 1 } | { "a": 1 } | キー名にダブルクォートを補完 |
| 行コメント | { // コメント
"a": 1 } | { "a": 1 } | // 行コメントを除去 |
| ブロックコメント | { /* ブロック */ "a": 1 } | { "a": 1 } | /* */ ブロックコメントを除去 |
| Markdown ラッパー | ```json
{ "a": 1 }
``` | { "a": 1 } | ```json と ``` ラッパーを除去 |
| 文字列未閉じ | { "a": "hello } | { "a": "hello" } | 欠落した文字列終了引用符を補完 |
| 括弧不足 | { "a": 1 | { "a": 1 } | スタックマッチングで右中括弧/角括弧を補完 |
JSON修復 vs JSONフォーマット vs JSON Schema検証
| ツール | 解決する問題 | 入力要件 | 失敗モード |
|---|---|---|---|
| JSON 修復 | 構文エラーのJSONを合法JSONに変換 | 許容的、非標準JSONを受け入れ | 構造推測不能なほど破損時にエラー |
| JSON フォーマット | 合法JSONを再整形 | 既に合法JSONである必要あり | SyntaxErrorを直接スロー |
| JSON 圧縮 | 空白を除去しサイズを縮小 | 既に合法JSONである必要あり | SyntaxErrorを直接スロー |
| JSON Schema 検証 | フィールド型/値がビジネス制約に準拠しているか確認 | 既に合法JSONである必要あり | 各フィールドの違反ルールをリスト表示 |
| JSON Merge / Sort | 複数ソースのマージ / キー名ソート | 既に合法JSONである必要あり | SyntaxErrorを直接スロー |
Authoritative References
- JSON 圧縮
- CSV to JSON
- JSON から CSV
- JSON Diff
- JSON Escape / Unescape
- JSONフラット化
- JSON フォーマッター
- JSON 生成
- JSONPath オンラインクエリ
- JSON マージ
- JSON 修復
- JSON Schema バリデーター
- JSONソート
- JSON Stringify
- JSONをHTMLに変換
- JSONからJavaへ
- JSON から Markdown
- JSON を SQL に変換
- JSON から TOML へ変換
- JSONをTypeScriptに変換
- XML を JSON に変換
- JSONをXMLへ変換
- YAML を JSON に変換
- JSON → YAML 変換
- JSON から Go へ
- JSON から Rust
- JSON から Swift
- JSON から C#
- JSON から C++
- JSON を PHP に
- JSON から Python