JSON の引用符なしキーを修正
name、active、profile のようなキーであっても、見た目は普通の識別子でも、有効な JSON では必ず引用符で囲む必要があ ります。
なぜ無引用キーは失敗するのか
JavaScript はオブジェクトリテラル内の素のプロパティ名を許容します。JSON は許容しません;あらゆるオブジェクトのキーはダブルクォートで囲まれた文字列でなければなりません。
エラーの例
{ name: "Ada", active: true }
修正後の JSON
{ "name": "Ada", "active": true }
JavaScript の識別子が JSON のキーに見える理由
JavaScript のオブジェクトリテラルでは、name が有効な識別子なので { name: "Ada" } は合法です。JSON はそのショートカットを外し、パーサがすべてのキーについて 1 つの形 —— 引用符付き文字列 —— だけを認識すれば済むようにしました。これで文法はどの言語でも実装できるくらい小さく保てます。
常に引用符が必要なキー
仮にパーサが素の識別子を許容したとしても、いくつかのキー形は引用符が必要です:return や class のような予約語、ハイフンやドットを含む名前、数字で始まる名前、結合文字や絵文字を含む Unicode 名などです。すべてのキーを引用符で囲めば、こうしたエッジケースをまとめて回避できます。
自動修復が安全に裸キーを引用符付きにできる条件
修復ツールはキー位置に現れた裸の識別子 —— つまり { または , の直後で、後ろに : が続くもの —— にだけ引用符を付けます。すでに引用符付きのキー、値、文字列内のテキストには触れないので、有効なキーと無効なキーが混在していても安全です。
JSON5 と JSONC
JSON5 と JSONC(VS Code の設定で使われる形式)はどちらも無引用キーやコメントを許容します。人が編集する設定には良いですが、データ交換には不向きです —— 標準クライアントは拒否するので、JSON5 を API 越しに出してはいけません。
FAQ
Q:なぜ JSON に無引用キーがあるのか? A:たいていは JavaScript のオブジェクトリテラルからコピーされたか、テンプレートエンジンが引用符を付け忘れたかです。Q:package.json では無引用のままで良いですか? A:いいえ。package.json は厳格な JSON です。許されるのは tsconfig.json(JSONC)だけです。
JSON 修復ガイド
トピックハブ
- JSON Parse Errors: Read the Message, Jump to the Fix
- Fix Invalid JSON: From 'What's Wrong' to a Clean File
- JSON Formatter, Validator, Viewer: Pick the Right Tool
- Repair LLM JSON Output: Handling Almost-JSON from AI
- Privacy: JSON Tools That Don't Leave Your Browser
- JSON Interop: YAML, CSV, XML, JWT, Schema
個別ガイド
- Base64 文字列のデコード方法(および JWT ペイロード)
- URL エンコーディング:クエリパラメータとパスをパーセントエンコードする
- YAML を JSON に変換(インデントエラーを避ける)
- JSON を CSV に変換:オブジェクト配列をフラット化
- JSON を XML に変換:ルート要素・属性・配列
- JSON を文字列リテラルとしてエスケープ(二重エンコードされた JSON のデコード)
- JSON の末尾カンマを修正
- JSON のシングルクォートを修正
- LLM が出力した JSON を修復する
- JSON 解析エラー「Expected Property Name」を修正
- JSON と JavaScript オブジェクトリテラルの違い
- API リクエスト前に JSON を検証する
- JSON フォーマッタ vs JSON Repair
- JSON の Unexpected Token エラーを修正
- JSON から JavaScript オブジェクトへの変換ツール