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

时间:2014-11-12 23:10:25

标签: javascript json

给出JSON文档

{"percentageAmount": .01}

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

Parse error on line 2:
..."percentageAmount": .01}
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

另一方面,这是有效的:

{"percentageAmount": 0.01}

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

为什么这是针对JSON规范的?

2 个答案:

答案 0 :(得分:10)

不。

根据railroad diagram for numbers at JSON.org,带小数值的数字必须在小数点前有数字:

Diagram showing that numbers with fraction parts must have a digit before the decimal point.

答案 1 :(得分:7)

  

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

来自the specification

  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

必填号码的唯一部分是int,其定义为zero1-9,后跟任意数量的数字。

所以JSON Lint是正确的。

  

为什么这是针对JSON规范的?

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