当前位置: 首页 > 面试题库 >

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

曹高阳
2023-03-14
问题内容

我正在将一些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,或者是否可以解决问题?


问题答案:

前导0表示JavaScript中的八进制数。八进制数字不能包含8;因此,该数字无效。而且,JSON不(正式地)支持八进制数,因此,即使该数字不包含8,JSON还是正式无效。尽管如此,某些解析器确实支持八进制数,这可能会引起一些混乱。其他解析器会将其识别为无效序列,并会引发错误,尽管它们给出的确切解释可能有所不同。

解决方案: 如果您有数字,请永远不要将其与前导零一起存储。如果您的值需要以零开头,则不要将其视为数字,而是字符串。用引号将其存储。

在这种情况下,您的UPC
必须为12位数字,并且可能包含前导零。我认为最好的存储方式是字符串。

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

另一方面。UPC是一个数字,并且用0到12位数字进行左填充的事实可以看作是显示属性。实际上,如果您通过添加一个额外的0将其左键填充到13位数字,则您将获得EAN代码,因为EAN是UPC的超集。

如果您有货币金额,€ 7.30则在将其存储为时,可能会将其显示为7.3,因此将产品代码存储为数字也很有意义。

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



 类似资料:
  • 问题内容: var x = 010; console.log(x); //8 JS引擎将数字转换为八进制数字。为什么会这样呢?我该如何预防? 问题答案: 历史 问题在于十进制整数文字不能包含前导零: 但是,ECMAScript 3允许(作为可选扩展)解析以8为底的前导零的文字: 但是ECMAScript 5禁止以严格模式执行此操作: 一致性实现,在处理时严格模式代码(见10.1.1) ,必须不延伸

  • 问题内容: 我有下面的代码 和输出是 我期望输出如下。 当我打印直接int值时,为什么会给出?我期望Java自动将值从零开始转换为八进制。 和之间是什么关系? 问题答案: 前导0表示一个八进制数(以8为底)。 01111(八进制)是1 * 8 ^ 3 + 1 * 8 ^ 2 + 1 * 8 ^ 1 + 1 * 8 ^ 0 = 585(十进制) 将十进制数字1111转换为八进制字符串。八进制2127

  • 问题内容: 给定以下示例: 输出为: 为什么? 问题答案: 这是因为前导零的整数文字是八进制整数(以8为底):

  • 问题内容: 在回答了这个问题之后,我很困惑为什么这段代码中的整数溢出而不是负数。奇怪,为什么这么精确的数字?为什么是0? 输出: 问题答案: 仅当的起始值为偶数时,才会发生这种情况。 根据JLS§15.17.1: 如果整数乘法溢出,则结果是数学乘积 的低阶位 ,以某种足够大的二进制补码格式表示。结果,如果发生溢出,则结果的符号可能与两个操作数值的数学积的符号不同。 如果我们以二进制格式而不是十进制

  • 我用RSA实现了数据加密/解密。如果我只是在本地加密/解密,它可以工作,但是如果我发送加密的数据,我会得到BadPaddingException:数据必须从零开始。 为了通过网络发送数据,我需要在客户端将数据从字节数组改为字符串(我以报头的形式发送),然后在服务器端检索数据并将其改回字节数组。 这里是我的本地加密/解密代码(我使用私钥加密,使用公钥解密): DecryptedString和mess

  • 问题内容: 为什么下面的Java代码 打印’Infinity’且未定义。这在数学上不是错吗? 问题答案: 在数学中,有许多支持算术的不同结构。最突出的数字(例如自然数,整数和实数)不包括无穷大。在那些系统中,不支持除以零。 其他系统的确包含至少一个无穷大。参见,例如,真实的投影线。它确实允许被零除。 只有一种方法可以知道在特定系统中数学定义或未定义的内容-研究该系统。 类似地,操作是可交换的(a