Single-quoted strings in JSON
JSON only recognises double quotes. Single quotes are valid in JavaScript, Python and YAML, so pasted snippets from those languages fail immediately.
The input
{'a': 1}{"a": 1}How to fix it
Replace every single quote used as a string delimiter with a double quote. Watch for apostrophes inside the text — those stay as they are.
A Python `print(my_dict)` produces single quotes. Use `json.dumps(my_dict)` instead.
What each parser reports
Every message below was captured by running this exact input through the parser named. 15 of 21 parsers rejected it; 6 accepted it.
| Parser | Exact message |
|---|---|
| CPython json.loads CPython 3.12.3 | Expecting property name enclosed in double quotes: line 1 column 2 (char 1)what this message means → |
| encoding/json Unmarshal Go go1.22.2 | invalid character '\'' looking for beginning of object key stringwhat this message means → |
| Gson Java 21.0.12 | accepted — no error |
| Gson JsonParser (lenient off) Java 21.0.12 | accepted — no error |
| hjson Node.js 22.22.2 | accepted — no error |
| Jackson ObjectMapper Java 21.0.12 | Unexpected character (''' (code 39)): was expecting double-quote to start field namewhat this message means → |
| JavaScriptCore JSON.parse JavaScriptCore (Bun 1.4.1) | JSON Parse error: Single quotes (') are not allowed in JSONwhat this message means → |
| json-bigint Node.js 22.22.2 | Bad string |
| JSON5 Node.js 22.22.2 | accepted — no error |
| JSON::PP Perl 5.038002 | unexpected end of string while parsing JSON string, at character offset 2 (before "a': 1}")what this message means → |
| json_decode PHP 8.3.6 | Syntax error |
| Newtonsoft.Json JsonConvert Newtonsoft.Json 13.0.3 on .NET 8.0.30 | accepted — no error |
| Newtonsoft.Json JsonTextReader Newtonsoft.Json 13.0.3 on .NET 8.0.30 | accepted — no error |
| orjson CPython 3.12.3 | unexpected character, expected a string key: line 1 column 2 (char 1)what this message means → |
| Ruby JSON.parse Ruby 3.2.3 | unexpected token at '{'a': 1}' |
| serde_json::from_str Rust (serde_json 1.x) | key must be a string at line 1 column 2what this message means → |
| SpiderMonkey JSON.parse SpiderMonkey 115 | JSON.parse: expected property name or '}' at line 1 column 2 of the JSON datawhat this message means → |
| System.Text.Json Deserialize .NET 8.0.30 | ''' is an invalid start of a property name. Expected a '"'. Path: $ | LineNumber: 0 | BytePositionInLine: 1.what this message means → |
| System.Text.Json JsonDocument .NET 8.0.30 | ''' is an invalid start of a property name. Expected a '"'. LineNumber: 0 | BytePositionInLine: 1.what this message means → |
| ujson CPython 3.12.3 | Expected object or value |
| V8 JSON.parse Node.js 22.22.2 | Expected property name or '}' in JSON at position 1 (line 1 column 2)what this message means → |
What the specification says
The exact sections that govern this error. Descriptions are our paraphrase; follow the links for the normative text.
| Body | Section |
|---|---|
| IETF | A string begins and ends with a quotation mark. Any Unicode character may appear between them except the quotation mark, the reverse solidus, and the control characters U+0000 through U+001F, which the section requires to be escaped. It also fixes the escape set and the \uXXXX form. |
| Ecma International | A string is code points wrapped in quotation marks; the quotation mark, reverse solidus and U+0000–U+001F must be escaped. Table 3 fixes the escape sequences. |
Other errors in this category
Trailing comma in a JSON object
A comma after the last member of an object. JavaScript, Python and most modern languages allow this in their own literal syntax, s…
Trailing comma in a JSON array
A comma after the last element of an array. Usually produced by a loop that appends `item + ','` without special-casing the final …
Unquoted object key in JSON
Object keys must be double-quoted strings. A bare identifier is legal in a JavaScript object literal but not in JSON.…
Missing comma between object members
Two key/value pairs with no separator. Common after copy-pasting a block of members or deleting a member and taking its neighbour'…
Missing comma between array elements
Two values in an array with only whitespace between them.…
Missing colon after an object key
A key followed directly by its value with no colon separating them.…
// comments are not valid JSON
JSON has no comment syntax. Comments are ubiquitous in config files, and several tools (VS Code settings, tsconfig) accept them vi…
/* */ comments are not valid JSON
Block comments, like line comments, have no place in the JSON grammar.…
Unquoted string value in JSON
A value that is neither a number, `true`, `false`, `null`, an object nor an array must be a quoted string.…
Numeric object key in JSON
A key written as a bare number. JSON object keys are always strings, even when they look like integers.…
Comma in an empty JSON object
A comma with no members around it, usually left after deleting the last entry of an object.…
Colon inside a JSON array
Object syntax used inside array brackets — the brackets should be braces, or the colon should be a comma.…
Double comma in a JSON array
Two commas in a row, leaving an empty slot. JavaScript allows array holes; JSON does not.…
Python dict repr passed off as JSON
The output of `str(dict)` or `print(dict)` rather than `json.dumps(dict)`. It combines single quotes with, potentially, `True`/`Fa…
JavaScript object literal passed off as JSON
Unquoted keys, single-quoted strings and trailing commas together — valid JavaScript source, not a JSON document.…