LLM が出力した JSON を修復する

AI の応答は一見 JSON のようでも、Markdown フェンス、コメント、Python 風リテラル、JavaScript オブジェクト構文を含むことがよくあります。

LLM の JSON でよくある問題

Markdown のコードフェンス、コメント、シングルクォート、無引用キー、末尾カンマ、Python の True/False/None など、いずれもせっかく有用な AI 応答を、厳格な JSON パースで失敗させ得る原因です。

修復のフロー

応答を JSON Fix に貼り、Repair & Format を実行し、その後 Validate でストリクトな JSON であることを確認してから、コードや API リクエストで使ってください。

プライバシーに関するメモ

修復はブラウザ内で完結します。社内例や非公開 API ペイロードを含むプロンプトをデバッグするときも安心して使えます。

ツールとレシピ

ブラウザでのクリーンアップなら、LLM の出力を JSON Fix に貼り Repair & Format をクリックします —— markdown のコードフェンス(```json ... ```)、末尾カンマ、Python リテラル(True/False/None)が 1 パスで除去されます。Node では npm パッケージの jsonrepair が依存なしで同じことをします。

修復量を減らすためのプロンプト

出力を制約してください:「JSON オブジェクトを 1 つだけ返し、それ以外は不要。markdown フェンス不要、コメント不要」。モデルが対応していれば JSON モードや response_format json_object を使い、フェンスや散文を構造的に排除します。プロンプト内のスキーマ(または function calling)はさらに余計なキーを抑えます。

LLM からの JSON ストリーミング

トークンが流れている間、JSON は定義上不完全です —— 閉じカッコがまだないからです。応答完了までバッファして一度パースするか、jsonrepair や partial-json のようなストリーム耐性のあるパーサで「最良の有効な接頭辞」を返してもらい、逐次レンダリングしてください。

修復ではなく明示的に失敗するべきとき

金銭取引、権限変更、破壊的アクションのトリガーになる JSON は、黙って修復しないでください —— 応答を拒否してリトライするか、生の出力をレビューに回します。修復は表示・デバッグ・リカバリ向けで、人手のレビューを伴わずに状態を変える入力には絶対に使わないでください。