CreaTools LogoCreaTools
JSON Formatter

JSONとJSONCの違い|コメントが使える場所・使えない場所

2025-01-03

30秒結論

用途JSONC(コメント付き)標準JSON
VSCode設定✅ OK✅ OK
tsconfig.json✅ OK✅ OK
API通信エラー✅ OK
JSON.parse()エラー✅ OK
データ保存・交換❌ 避ける✅ OK

JSONCは「人が読む設定ファイル専用」。外に出すときは標準JSONに変換。


JSONCとは

JSONC(JSON with Comments)は、コメントと末尾カンマを許容する拡張仕様。

{
  // 単一行コメント
  "editor.fontSize": 14,
  /*
   * 複数行コメント
   */
  "editor.tabSize": 2,  // ← 末尾カンマもOK
}

主にVSCodeの設定ファイルで使われている。


使える場所・使えない場所

✅ JSONCが使える場所

ファイル用途
settings.jsonVSCode設定
tsconfig.jsonTypeScript設定
launch.jsonデバッグ設定
devcontainer.jsonDev Container設定
.vscode/*.jsonVSCode関連全般

これらはエディタがJSONCとして処理するので、コメントを書いても動く。

❌ JSONCが使えない場所

場面結果
API通信パースエラー
JSON.parse()SyntaxError
外部サービスへのデータ送信エラー
package.json一部ツールで動かない

事故パターン:JSONCをそのままAPIに送る

何が起きるか

// VSCodeからコピーした設定
const config = `{
  // APIエンドポイント
  "url": "https://api.example.com",
  "timeout": 3000,
}`;

// これをそのまま送ると...
fetch('/api', {
  headers: { 'Content-Type': 'application/json' },
  body: config,  // ← サーバー側でパースエラー
});

サーバーの JSON.parse() はコメントを理解しない。

対処法

送信前にコメントを除去する。

方法1: JSON Formatter の「コメント除去」をONにして変換

方法2: コードで処理

import stripJsonComments from 'strip-json-comments';

const json = stripJsonComments(jsonc);
const data = JSON.parse(json);

事故パターン:JSON.parse()でJSONCを読む

何が起きるか

JSON.parse('{"a": 1 // comment}');
// → SyntaxError: Unexpected token '/' at position 8

ブラウザやNode.jsの標準APIはコメント非対応。

対処法

JSONC対応のパーサーを使う。

// jsonc-parser パッケージ
import { parse } from 'jsonc-parser';

const data = parse('{"a": 1 // comment}');
// → { a: 1 }

判断フローチャート

JSONにコメントを書きたい
    ↓
そのファイルは外部と共有する?
    ├── Yes → 標準JSONを使う(コメントは別ドキュメントに)
    └── No → JSONCでOK
             ↓
         APIに送信する?
             ├── Yes → 送信前にコメント除去
             └── No → そのまま使う

末尾カンマの扱い

JSONCでは末尾カンマも許容されることが多い。

{
  "a": 1,
  "b": 2,  // ← 標準JSONではエラー
}

便利だが、これもAPIに送る前には除去が必要


まとめ

ポイント内容
JSONCの用途人が読む設定ファイル専用
使える場所VSCode設定、tsconfig.json など
使えない場所API通信、JSON.parse()、外部連携
事故を防ぐには外に出す前にコメント除去

👉 JSON Formatter の「コメント除去」で標準JSONに変換できる