JSON の文法には、コメントを書く仕組みがありません。このページでは、仕様の文法を読み、実際に JSON.parse へコメント付きの文字列を渡して、何が起きるかを確かめます。
仕様は空白を 4 文字しか認めていない
json.org は、JSON の文法を図で示したうえで、次のように述べています。
Whitespace can be inserted between any pair of tokens. Excepting a few encoding details, that completely describes the language.
出典: https://www.json.org/json-en.html(取得日: 2026-09-22)
「トークンの間には空白を入れてよい。文字エンコーディングの細部を除けば、これで言語の全体が説明できる」という意味です。文法の図にも、コメントの項目はありません。
標準化された文書である RFC 8259 も同じです。空白(ws)は次の 4 文字だけを認めています。
ws = *(
%x20 / ; Space
%x09 / ; Horizontal tab
%x0A / ; Line feed or New line
%x0D ) ; Carriage return
出典: https://www.rfc-editor.org/rfc/rfc8259(取得日: 2026-09-22)
スペース・タブ・改行・復帰です。// や /* */ をトークンの間に置ける、という規定はどこにもありません。つまり、コメントは「空白として無視される書き方」にも入っていません。
JSON.parse に渡してみる
Node.js の JSON.parse は、この文法に沿って読みます。行コメント・ブロックコメント・末尾カンマを 1 つずつ渡します。
for (const [n, s] of [
["line", '{"a":1 // c\n}'],
["block", '{"a":1 /* c */}'],
["trailing", '{"a":1,}'],
]) {
try {
JSON.parse(s);
console.log(n, "ok");
} catch (e) {
console.log(n + ":", e.message);
}
}
3 つとも構文エラーです。position 7 は 0 から数えた文字の位置で、{"a":1 の直後にある /(末尾カンマの例では })を指しています。エラーメッセージは、1 の後ろに来てよいのは , か } だけだと言っています。
「空白ではない」ことの意味
JSON の文法では、トークンの間に置けるものが空白の 4 文字に限られています。そのため、パーサーは「ここは読み飛ばしてよい部分」を、この 4 文字だけで判断できます。// から行末までを飛ばす、/* から */ までを飛ばす、といった処理は、文法に書かれていないので、標準の実装は持ちません。
だから、JSON にコメントを書いて JSON.parse に渡すと、コメントは「読み飛ばされる部分」ではなく「文法に合わない文字」として扱われます。エラーメッセージの位置が、コメントの始まりの / を指していたのは、このためです。
このページで言えること
- JSON の文法(json.org・RFC 8259)に、コメントの仕組みは無い
- 空白として許されるのは 4 文字だけで、
//や/* */は空白ではない - 標準どおりに読む
JSON.parseは、コメントを構文エラーにする
ここで確かめたのは「標準の JSON」の話です。次のページでは、拡張子が同じ .json でも、コメントを受け付けるファイルがあることを見ます。