我试图将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,但我想知道是否有更好的选择。任何帮助将不胜感激。
答案 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;列。