DJS*_*SrA 39 parsing json object zero parseint
我正在将一些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 ",
}
Run Code Online (Sandbox Code Playgroud)
如果我通过删除0from "UPC":083456789012,或将其转换为JSON来更新JSON "UPC":"083456789012",变为有效.
JSON真的不能接受以问题开头的整数0,或者是否有办法解决问题?
Gol*_*rol 59
前导0表示JavaScript中的八进制数.八进制数不能包含8,因此该数字无效.此外,JSON没有(正式)支持八进制数,所以正式JSON是无效的,即使数字不包含8.但是有些解析器确实支持它,这可能会导致一些混淆.其他解析器会将其识别为无效序列,并会抛出错误,尽管它们给出的确切解释可能会有所不同.
解决方案:如果您有一个数字,请不要使用前导零存储它.如果您的值必须具有前导零,请不要将其视为数字,而是将其视为字符串.用它周围的引号存储它.
在这种情况下,你有一个UPC,需要12位数字,可能包含前导零.我认为存储它的最佳方式是字符串.
但这是值得商榷的.如果将它视为条形码,将前导0视为其中不可或缺的一部分,则字符串是有意义的.其他类型的条形码甚至可以包含字母字符.
另一方面.UPC是一个数字,它的左边用零填充到12位的事实可以看作是一个显示属性.实际上,如果你通过添加一个额外的0将它左边填充到13位,你就有了一个EAN代码,因为EAN是UPC的超集.
如果您有单数量,您可以将其显示为€ 7.30,同时将其存储为7.3,因此将产品代码存储为数字也是有意义的.
但那个决定取决于你.我只能建议你使用字符串,这是我个人对这些代码的偏好,如果你选择数字,那么你必须删除它0才能使它工作.
JavaScript中一个比较令人困惑的部分是,如果一个数字以a 0后面没有紧跟a开头.,则表示八进制,而不是十进制.
JSON借鉴了JavaScript语法,但避免了令人困惑的功能,所以简单地禁止带有前导零的数字(除非后面跟着a .).
即使不是这种情况,也没有理由期望在0解析之后它仍然在数字中02并且2只是相同数字的差异表示(如果强制小数).
如果前导零对您的数据很重要,那么您可能有一个字符串而不是数字.
"UPC":"083456789012"
Run Code Online (Sandbox Code Playgroud)
一个产品代码是一个标识符,不是你做数学的东西.它应该是一个字符串.