Errors · JSON

Expecting ‘,’ delimiter

A comma is missing between two values — after a property, or between two items of an array. Python calls it a delimiter; V8 says which two characters it expected; both point one token past the break.

no signup · runs entirely in your browser · ⌘V works anywhere on this page

What each parser says

The sample below, unchanged, through three parsers. The message is the same break in three wordings; the line or position each names is where the parser gave up, not always where the break is.

Node and Chrome (V8), measured when this page was built
Expected ',' or '}' after property value in JSON at position 20 (line 3 column 3)
Python 3.14 json.loads, measured 2026-09-06
Expecting ',' delimiter: line 3 column 3 (char 20)
jq 1.7, measured 2026-09-06
jq: parse error: Expected separator between values at line 3, column 10

The fix, measured

Between two properties
{"a": 1 "b": 2}{"a": 1, "b": 2}
Between two array items
[{"a": 1} {"a": 2}][{"a": 1}, {"a": 2}]
The whole sample
{ "id": "ord_1" "status": "paid", "items": [{"sku": "A", "qty": 1} {"sku": "B", "qty": 2}] }{ "id": "ord_1", "status": "paid", "items": [{"sku": "A", "qty": 1}, {"sku": "B", "qty": 2}] }

2 fixes, both named “Insert missing comma after value”.

Where the parser points

Python and V8 report the line the next value starts on, jq the column of that value: all three point one token past the break, because a parser only knows something is wrong when it meets what should not be there. The dot on the page sits on the line that lost its comma.

The sample

What the first sample opens — a real file, not an illustration written for this page.

order.json
{
  "id": "ord_1"
  "status": "paid",
  "items": [{"sku": "A", "qty": 1} {"sku": "B", "qty": 2}]
}

Questions

Why does the error point at the wrong line?

The parser read the value before the missing comma without complaint; it fails on the next token, which is often on the next line. The line it names is one past the break.

Is it always a comma?

Almost always. The same message appears when a value is followed by anything a parser did not expect — a stray word, a second value, a colon — so the page names each case on its line rather than assuming.

Does the fix change anything else?

No. A comma is inserted after the value the parser stopped at; the rest of the text stays byte for byte, and undo in the app puts it back.

Try it on the file that broke your afternoon.

free while in alpha · no signup