在 jsonlite 中使用 fromJSON 转换 JSON 时的有效数字

Significant digits when converting JSON using fromJSON in jsonlite

我正在使用 jsonlite 包中的 fromJSON 将 JSON 转换为 R 对象,但数值正在四舍五入。如何控制转换数值的精度?

例子

library(jsonlite)
fromJSON('{"lon": -86.143278324353244}')
## $lon
## [1] -86.14328

## Desired output is -86.143278324353244

查看 jsonlite 代码,我已将函数调用追溯到 R_parse,在 parse.c

.Call(jsonlite:::R_parse, "-86.143278324353244", FALSE)
## [1] -86.14328

其他尝试

它在那里...

> print(fromJSON('{"lon": -86.143278324353244}'), digits=20)
$lon
[1] -86.143278324353247

万一有人还在访问这个 - 我碰到了类似的东西,而且很糟糕,这是限制 JSON 只有一个 float 类型,并且 fromJSON 导入是四舍五入的。 在我的例子中,我试图读取一个纳秒级的值,它被增加了 13 纳秒左右。如果你 运行 在 R:

suppressMessages(library(jsonlite))
options(digits=22)
x=fromJSON('{"ns": 1567002188374607769}')
print(x)
print(fromJSON('{"ns": 1567002188374607769}'), digits=22)

我明白了:

$ns
[1] 1567002188374607872

$ns
[1] 1567002188374607872

...872 != ...769 我还没有想出一个好的解决方案,除了可能将 ns 值存储为 JSON 字符串之外...

使用设置 options(digits = 30) 解决了我的问题。