Correct, you cannot have a leading zero on a number in JSON.
The reasons are largely historical: JSON is derived from JavaScript literal notation. At one point, in JavaScript numeric literal notation, a leading 0 meant octal (base 8), so 010
would be the number eight. This was in the 1st and 2nd editions of the ECMAScript spec (1997 and 1998, respectively). In the 3rd edition it was deprecated to an optional "additional" syntax, and in the 5th edition (there was no 4th edition) it was forbidden in the new "strict" mode. Finally ES2015 (also called the 6th edition, it's where TC39 decided to start using years) introduced an unambiguous Octal notation: A leading 0o
prefix (case-insensitive), analogous to the 0x
prefix for hex.
During all this curfluffle about whether a leading 0 should mean octal, Crockford was defining JSON, and not allowing the leading 0 simplifies things and avoids confusion, both of which were important when JSON was defined. He even decided not to support hex, for the sake of simplicity/ease of parsing.