Leading decimal point in a JSON number
`.5` is valid in several languages but JSON requires a digit before the decimal point.
The input
{"a": .5}{"a": 0.5}How to fix it
Write `0.5`.
Hand-written config files and templated values are the usual source.
What each parser reports
Every message below was captured by running this exact input through the parser named. 16 of 21 parsers rejected it; 5 accepted it.
| Parser | Exact message |
|---|---|
| CPython json.loads CPython 3.12.3 | Expecting value: line 1 column 7 (char 6)what this message means → |
| encoding/json Unmarshal Go go1.22.2 | invalid character '.' looking for beginning of valuewhat 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 | End of input while parsing an object (missing '}') at line 1,9 >>>"a": .5} ...what this message means → |
| Jackson ObjectMapper Java 21.0.12 | Unexpected character ('.' (code 46)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')what this message means → |
| JavaScriptCore JSON.parse JavaScriptCore (Bun 1.4.1) | JSON Parse error: Unexpected token '.'what this message means → |
| json-bigint Node.js 22.22.2 | Unexpected '.' |
| JSON5 Node.js 22.22.2 | accepted — no error |
| JSON::PP Perl 5.038002 | malformed JSON string, neither array, object, number, string or atom, at character offset 6 (before ".5}")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 | no digit after sign: line 1 column 7 (char 6)what this message means → |
| Ruby JSON.parse Ruby 3.2.3 | unexpected token at '{"a": .5}' |
| serde_json::from_str Rust (serde_json 1.x) | expected value at line 1 column 7what this message means → |
| SpiderMonkey JSON.parse SpiderMonkey 115 | JSON.parse: unexpected character at line 1 column 7 of the JSON datawhat this message means → |
| System.Text.Json Deserialize .NET 8.0.30 | '.' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 6.what this message means → |
| System.Text.Json JsonDocument .NET 8.0.30 | '.' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 6.what this message means → |
| ujson CPython 3.12.3 | Expected object or value |
| V8 JSON.parse Node.js 22.22.2 | Unexpected token '.', "{"a": .5}" is not valid JSONwhat 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 number is base 10, optionally signed with a minus, with an optional fraction and exponent. The section states that leading zeros are not allowed, and that values which cannot be represented in its grammar — Infinity and NaN among them — are not permitted. |
| Ecma International | A number is decimal digits with no superfluous leading zero. Values such as Infinity and NaN are not permitted. |
Other errors in this category
Leading zero in a JSON number
JSON's number grammar forbids a leading zero on a multi-digit integer, to avoid any suggestion of octal. Zip codes, phone numbers …
Leading plus sign in a JSON number
JSON allows a leading minus but not a leading plus. Explicitly signed values from spreadsheets or telemetry formats trip this.…
Trailing decimal point in a JSON number
`1.` is valid in C and JavaScript but not in JSON, which requires at least one digit after the decimal point.…
Hexadecimal number in JSON
JSON numbers are decimal only. `0x1F` comes from a language literal or from a value that should have stayed a string, such as a co…
Bare minus sign where a number was expected
A minus with no digits after it. Typically a templated value that resolved to empty, leaving the sign behind.…