没有前导零的小数是否有效JSON?

Mar*_*rch 8 javascript json

给出JSON文档

{"percentageAmount": .01}
Run Code Online (Sandbox Code Playgroud)

由JSONLint.com运行它会导致错误:

Parse error on line 2:
..."percentageAmount": .01}
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
Run Code Online (Sandbox Code Playgroud)

另一方面,这是有效的:

{"percentageAmount": 0.01}
Run Code Online (Sandbox Code Playgroud)

如果将代码作为JavaScript文字分配给变量,则代码会被正确解析,但当然对于不是JSON规范的JavaScript变量,有很多东西都可以.

为什么这违反了JSON规范?

mae*_*ics 10

不.

根据JSON.org上数字的铁路图,带小数值的数字必须在小数点前有数字:

图表显示具有小数部分的数字必须在小数点前有一个数字.

  • 我喜欢这些图表.这提供了答案. (3认同)

Que*_*tin 7

没有前导零的小数是否有效JSON?

规格:

  number = [ minus ] int [ frac ] [ exp ]

  decimal-point = %x2E       ; .

  digit1-9 = %x31-39         ; 1-9

  e = %x65 / %x45            ; e E

  exp = e [ minus / plus ] 1*DIGIT

  frac = decimal-point 1*DIGIT

  int = zero / ( digit1-9 *DIGIT )

  minus = %x2D               ; -

  plus = %x2B                ; +

  zero = %x30                ; 0
Run Code Online (Sandbox Code Playgroud)

强制数字的唯一部分int是定义为zero1-9后跟任意数量的数字.

所以JSON Lint是正确的.

为什么这违反了JSON规范?

据我所知,作者用这种方式定义它的原因并没有在任何地方记录.