在jsonlite中使用fromJSON转换JSON时的重要数字

时间:2016-03-16 14:19:30

标签: json r jsonlite

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

示例

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

## Desired output is -86.143278324353244

查看jsonlite代码,我在parse.c

中跟踪了函数调用回R_parse
.Call(jsonlite:::R_parse, "-86.143278324353244", FALSE)
## [1] -86.14328

其他尝试

  • fromJSON有一个digits参数,但它不是toJSON的有效参数。
  • 其他软件包如rjsonRJSONIO会产生类似的结果。

3 个答案:

答案 0 :(得分:3)

它在那里......

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

答案 1 :(得分:0)

如果有人仍在访问此文件-我碰到类似的东西,当然,这是JSON仅具有浮点类型且fromJSON导入是舍入的限制。 以我为例,我试图读取一个纳秒级的值,但它被提高了13ns左右。如果您在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字符串之外,我还没有一个很好的解决方案...

答案 2 :(得分:0)

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