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

标签 json parsing 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 ",
}

如果我通过从 "UPC":083456789012, 中删除 0 或将其转换为 "UPC":"083456789012", 生效。

JSON 真的不能接受以 0 开头的整数吗,或者有没有办法解决这个问题?

最佳答案

前导 0 表示 JavaScript 中的八进制数。八进制数不能包含 8;因此,该号码无效。 此外,JSON(官方)不支持八进制数,因此 JSON 是无效的,即使数字不包含 8。但有些解析器确实支持它,这可能会导致一些困惑。其他解析器会将其识别为无效序列并抛出错误,尽管它们给出的确切解释可能不同。

解决方案:如果您有一个数字,请不要将其与前导零一起存储。如果您有一个需要前导零的值,请不要将其视为数字,而应将其视为字符串。用引号将其存储起来。

在这种情况下,您的 UPC 为 needs to be 12 digits long并且可能包含前导零。我认为最好的存储方式是字符串。

不过,这值得商榷。如果您将其视为条形码,将前导 0 视为其不可分割的一部分,那么字符串是有意义的。其他类型的条形码甚至可以包含字母字符。

另一方面。 UPC 是一个数字,它的左侧填充了 0 到 12 位数字这一事实可以被视为一种显示属性。实际上,如果您通过添加一个额外的 0 将其左填充为 13 位,您就会得到一个 EAN 代码,因为 EAN 是 UPC 的超集。

如果您有一个货币金额,您可以将其显示为 € 7.30,而将其存储为 7.3,因此存储产品代码也很有意义作为一个数字。

但这个决定取决于你。我只能建议您使用字符串,这是我个人对这些代码的偏好,如果您选择数字,则必须删除 0 才能使其工作。

关于json - 如果整数以前导零开头,为什么 JSON 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361565/

相关文章:

json - 如何将结构作为参数传递给函数

java - ParseJson.java,如果没有数组名称则解析结果?

java - 解析大型 XML 文件并获取重复属性

javascript - 对象到数组的 react

javascript - 需要对象字面量函数中 switch case 的默认值的等效项

django - 在 Django 中处理 JSON 的最佳方式

java - 改造空响应

java - 安卓服务器: Parse server gradle build

java - 如何在 Eclipse 中同时解析 Java 和 C++?

JQuery 使用属性切片对象