为了账号安全,请及时绑定邮箱和手机立即绑定

如果整数以前导零开头,为什么JSON无效?

如果整数以前导零开头,为什么JSON无效?

我正在将一些JSON文件导入到我的Parse.com项目中,并且不断收到错误“无效键:值对”。它指出有一个意外的“ 8”。这是我的JSON的示例:} "Manufacturer":"Manufacturer", "Model":"THIS IS A STRING", "Description":"", "ItemNumber":"Number12345", "UPC":083456789012, "Cost":"$0.00", "DealerPrice":" $0.00 ", "MSRP":" $0.00 ",}如果我通过0从中移除JSON "UPC":083456789012,或将其转换为JSON来更新JSON,则"UPC":"083456789012",它变得有效。JSON真的可以接受以开头的整数0吗,还是可以解决问题?
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

JavaScript中最令人困惑的部分之一是,如果数字以a开头0,而不是紧随其后的.,则它表示一个八进制,而不是十进制。


JSON借用了JavaScript语法,但避免了混淆的功能,因此完全禁止使用带前导零的数字(除非后面带有a .)。


即使这是不是这样,也就没有理由期望0仍处于数量时,这是自解析02和2有相同数量的只是差表示(如果强制十进制)。


如果前导零对您的数据很重要,则可能是字符串而不是数字。


"UPC":"083456789012"

一个产品代码是一个标识符,不是你做数学的东西。应该是一个字符串。


查看完整回答
反对 回复 2019-12-02
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

正式地,这是因为JSON DecimalIntegerLiteral在其JSONNumber生产中使用:


JSONNumber ::

    -_opt DecimalIntegerLiteral JSONFraction_opt ExponentPart_opt

并DecimalIntegerLiteral可能只有开始0,如果它是0:


DecimalIntegerLiteral ::

    0

    NonZeroDigit DecimalDigits_opt

背后的原因可能是:


在JSON语法中-重用ECMAScript主语法中的构造。

在主要的ECMAScript语法-更容易区分DecimalIntegerLiteral从HexIntegerLiteral和OctalIntegerLiteral。OctalIntegerLiteral首先。

看到这个作品:


 HexIntegerLiteral ::

     0x HexDigit

     0X HexDigit

    HexIntegerLiteral HexDigit

...


OctalIntegerLiteral ::

    0 OctalDigit

    OctalIntegerLiteral OctalDigit


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 1095 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信