但是,您必须准-6ren">
gpt4 book ai didi

json - 使用 jsonlite 转换包含大量数字的 json 字符串会得到错误的结果

转载 作者:行者123 更新时间:2023-12-02 13:59:16 24 4
gpt4 key购买 nike

这是 MWE,如何获取正确的数字作为字符。

require(jsonlite)

j <- "{\"id\": 323907258301939713}"
a <- fromJSON(j)

print(a$id, digits = 20)
class(a$id)

a$id <- as.character(a$id)
a$id
class(a$id)

这是输出。

Loading required package: jsonlite
Loading required package: methods
[1] 323907258301939712
[1] "numeric"
[1] "323907258301939712"
[1] "character"

我想获取确切的数字323907258301939713作为a中的字符

最佳答案

在 JavaScript 中,数字是 double float ,即使它们看起来像整数,因此它们只有大约 16 位十进制数字的精度。特别是 JavaScript 代码:

console.log(12345678901234567 == 12345678901234568)

打印“true”。

JSON 标准从 JavaScript 继承了此限制,因此 jsonlite 实际上通过将数字读取为 double 来正确解释您的 JSON。

因为这实际上是 JSON 标准的限制,如果您可以控制生成 JSON 的程序,那么如果您修复 JSON(例如,通过表示 id 属性作为字符串):

{ "id": "323907258301939713" }

但是,如果您绝对必须解析这个格式错误的 JSON,那么您很幸运。 fromJSON 函数采用一个未记录的 bool 参数 bigint_as_char ,它将这些大数字作为字符值读取到 R 中:

>     a <- fromJSON(j, bigint_as_char=TRUE)
> print(a$id)
[1] "323907258301939713"
>

但是,您必须准备好在 R 代码的其余部分中处理纯数字和字符值,因为 fromJSON 仍会将整数读取为普通数字,并且只将这些太大的整数作为字符串读取。

关于json - 使用 jsonlite 转换包含大量数字的 json 字符串会得到错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com