Extra data after a JSON document
Two complete documents concatenated. Usually a file appended to rather than overwritten, or several API responses written to the same buffer.
The input
{"a": 1}{"b": 2}[{"a": 1}, {"b": 2}]How to fix it
Split the documents, or if you meant a stream of records, use NDJSON and parse one line at a time.
A JSON text is exactly one value. Anything after it is an error, however well-formed it is on its own.
What each parser reports
Every message below was captured by running this exact input through the parser named. 20 of 21 parsers rejected it; 1 accepted it.
| Parser | Exact message |
|---|---|
| CPython json.loads CPython 3.12.3 | Extra data: line 1 column 9 (char 8)what this message means → |
| encoding/json Unmarshal Go go1.22.2 | invalid character '{' after top-level valuewhat this message means → |
| Gson Java 21.0.12 | Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 10 path $what this message means → |
| Gson JsonParser (lenient off) Java 21.0.12 | Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 10 path $what this message means → |
| hjson Node.js 22.22.2 | Syntax error, found trailing characters at line 1,8 >>>"a": 1}{"b": 2} ...what this message means → |
| Jackson ObjectMapper Java 21.0.12 | accepted — no error |
| JavaScriptCore JSON.parse JavaScriptCore (Bun 1.4.1) | JSON Parse error: Unable to parse JSON stringwhat this message means → |
| json-bigint Node.js 22.22.2 | Syntax error |
| JSON5 Node.js 22.22.2 | JSON5: invalid character '{' at 1:9what this message means → |
| JSON::PP Perl 5.038002 | garbage after JSON object, at character offset 9 (before ""b": 2}")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 | Additional text encountered after finished reading JSON content: {. Path '', line 1, position 8.what this message means → |
| Newtonsoft.Json JsonTextReader Newtonsoft.Json 13.0.3 on .NET 8.0.30 | Additional text encountered after finished reading JSON content: {. Path '', line 1, position 8.what this message means → |
| orjson CPython 3.12.3 | unexpected content after document: line 1 column 9 (char 8)what this message means → |
| Ruby JSON.parse Ruby 3.2.3 | unexpected token at '{"b": 2}' |
| serde_json::from_str Rust (serde_json 1.x) | trailing characters at line 1 column 9what this message means → |
| SpiderMonkey JSON.parse SpiderMonkey 115 | JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 9 of the JSON datawhat this message means → |
| System.Text.Json Deserialize .NET 8.0.30 | '{' is invalid after a single JSON value. Expected end of data. Path: $ | LineNumber: 0 | BytePositionInLine: 8.what this message means → |
| System.Text.Json JsonDocument .NET 8.0.30 | '{' is invalid after a single JSON value. Expected end of data. LineNumber: 0 | BytePositionInLine: 8.what this message means → |
| ujson CPython 3.12.3 | Trailing data |
| V8 JSON.parse Node.js 22.22.2 | Unexpected non-whitespace character after JSON at position 8 (line 1 column 9)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 JSON text is a single value with optional surrounding whitespace ( JSON-text = ws value ws). The token set is six structural characters, strings, numbers and three literal names — nothing else. |
| Ecma International | Lists the six structural tokens, the three literal name tokens, and the four whitespace code points. Whitespace is not allowed within a token. |
Other errors in this category
Empty string passed to a JSON parser
The document is zero bytes. Almost always an upstream failure: an HTTP call that returned 204, a file that was never written, a va…
Whitespace-only input
The document contains only spaces, tabs or newlines. Same family as empty input — a file was created but never filled.…
Trailing characters after a JSON document
Non-whitespace content after the closing brace — a stray word, a shell prompt captured with the output, or a log line appended to …
HTML received where JSON was expected
The response body is an HTML page, not JSON. The server returned an error page, a login redirect, a proxy or captive-portal inters…
The literal string 'undefined' as a JSON document
A JavaScript variable holding `undefined` was interpolated into a string and sent as the body. `String(undefined)` is `"undefined"…
Bare unquoted word as a JSON document
A single token with no quotes. Either a plain-text response being parsed as JSON, or a string value that was never quoted.…
Whole JSON document wrapped in quotes
The document is double-encoded — a JSON string containing JSON, or a shell variable that kept its surrounding quotes.…
NDJSON fed to a whole-document JSON parser
Newline-delimited JSON: one complete document per line. Each line is valid on its own, but the file as a whole is not a single JSO…