我正在编写自己的JSON解析器,遇到了区分实数表示和整数表示的问题。因此,假设我将json值(通过网络)接收为一个字符串,如下所示:
"123456"
根据史托尔和史托德,我可以同时解释为浮点数和十进制数。strtol期望有一个可选的+/-符号,后面跟着“一个数字序列”,而strod则期望一个“非空的十进制数字序列,可选地包含小数点字符”。正如您所看到的,十进制数字是可选的--这意味着上面的示例可以解释为浮点数,即使将它作为整数进行提取可能更直观。
那么,对于如何区分字符串表示法中的整数和浮点数,或者我应该分支什么决定性特征,是否存在一致意见呢?
注意:不,我不能使用C++ charconv
,因为我使用的是嵌入式系统,代码膨胀是不能接受的(因为查找表等等)。
发布于 2022-08-10 03:20:36
与JavaScript一样,JSON不区分整数和实数(通常由浮点数表示);它们都是数字。JavaScript中的数字都是IEEE754 64位二进制浮点数,所以您应该可以安全地对其进行解析。
如果您想将额外的结构强加于某个给定的模式,那么您可以随意使用,但是JSON本身并不知道或不关心这种区别。
这是众所周知的一些问题,因为有些人希望支持比64位二进制浮点数通常被解析成的更大的数字,甚至是固定格式的数字,比如浮点数无效的货币。这通常是通过首先将"number“序列化成一个字符串来实现的,这样它就不会在JSON解析器中被更改,然后手动反序列化。
https://stackoverflow.com/questions/73301204
复制