将数值统一转换为JSON

时间:2016-09-26 08:39:46

标签: json r

我试图将data.table对象转换为JSON。具有numeric值的列应该在" uniform"中转换为JSON值。方式,即所有值都应包含小数部分,即使它是" .0"。我所拥有的是:

library(RJSONIO)
test <- data.table(V1 = c(1.0, 2.0, 4.5, 3.0))
cat(toJSON(test))

{
  "V1": [ 1,  2,  4.5,  3 ] 
}

然而,我尝试做的是获得以下输出:

{
  "V1": [ 1.0,  2.0,  4.5,  3.0 ] 
}

我已尝试使用rjson之类的其他库,并获得相同的结果。我似乎无法找到任何可以控制它的选项。我的最后一个选择是手动处理输出JSON字符串,最后添加所需的&#34; .0&#34; s,但我想知道是否有更好的选择。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

以下代码使用格式 round 完全按照您的要求指定小数位数:

     library(RJSONIO)
     library(data.table)

     test <- data.table(V1 = c(1.0, 2.0, 4.5, 3.0))
     test$V1 <- format(round(test$V1, 2))
     cat(toJSON(test))

结果:

{
 "V1": [ "1.0", "2.0", "4.5", "3.0" ] 
}

答案 1 :(得分:1)

jsonlite有一个always_decimal选项:

> test <- data.table(V1 = c(1.0, 2.0, 4.5, 3.0))
> test
    V1
1: 1.0
2: 2.0
3: 4.5
4: 3.0
> jsonlite::toJSON(test,  dataframe="columns", always_decimal=TRUE)
{"V1":[1.0,2.0,4.5,3.0]} 

它似乎并非严格意义上总是&#34;:

> test$V2 = 1:4
> jsonlite::toJSON(test,  dataframe="columns", always_decimal=TRUE)
{"V1":[1.0,2.0,4.5,3.0],"V2":[1,2,3,4]} 

但它看起来确实对列类型进行了一些检查:

> test$V3 = c(1,2,3,4.0)
> jsonlite::toJSON(test,  dataframe="columns", always_decimal=TRUE)
{"V1":[1.0,2.0,4.5,3.0],"V2":[1,2,3,4],"V3":[1.0,2.0,3.0,4.0]} 

并为&#34;数字&#34;做小数而不是&#34;整数&#34;列。