Expecting ',' delimiter
The parser finished one value and found the next one starting straight away, with no comma between them. Here is the trap. You get this same message when a comma is genuinely missing and when a string ended earlier than you meant it to. The second case is far more common, so check your quotes first.
How the message appears
CPython's json module reports line, column and character offset. Treat the position as an upper bound. An unterminated string moves it well past the real mistake.
The fix
Escape every double quote that belongs inside a string as \", and add any comma that really is missing. If the reported column points at text that looks perfectly fine, read backwards from there for a quote that closed a string too early.
{
"quote": "she said "hi" to me",
"id": 2
}{
"quote": "she said \"hi\" to me",
"id": 2
}The example travels in the URL fragment, which browsers never send to a server.
What causes it
An unescaped double quote inside a string
Check this one first. "she said "hi" to me" is not one string with quotes inside it. It is the string "she said ", then the bare word hi, then more text. The parser sees two values in a row, reports a missing comma, and points at innocent-looking text several characters past the real mistake.
A genuinely missing comma
Two keys or two array items with nothing between them. Usually a hand edit, or a merge that dropped a line.
A colon typed as a comma
This gives you the sibling message Expecting ':' delimiter instead. Python read a key, and what came after it was not a colon.
Worth knowing
- Never build JSON by dropping text into a template with an f-string or
%. The first value that contains a quote, an apostrophe-heavy sentence or a Windows path gives you this error.json.dumpsescapes properly, and it is not slower in any way you will notice. - The sibling message
Expecting ':' delimiterhas the same shape. Something turned up where the parser knew one specific character had to go.
Written by Vishnu Shankar.