我正在编写一些帮助程序函数,以将我的R变量转换为JSON。我遇到了这个问题:我希望将我的值表示为JSON数组,这可以根据RJSONIO文档使用AsIs类完成。
x = "HELLO"
toJSON(list(x = I(x)), collapse="")
"{ \"x\": [ \"HELLO\" ] }"
但是说我们有一个清单
y = list(a = "HELLO", b = "WORLD")
toJSON(list(y = I(y)), collapse="")
"{ \"y\": {\n \"a\": \"HELLO\",\n\"b\": \"WORLD\" \n} }"
在y-> a中找到的值不表示为数组。理想情况下,我会
"{ \"y\": [{\n \"a\": \"HELLO\",\n\"b\": \"WORLD\" \n}] }"
注意方括号。我也想摆脱所有的“\ n”,但是折叠不能消除嵌套JSON中的换行符。有任何想法吗?
最佳答案
尝试写为
y = list(list(a = "HELLO", b = "WORLD"))
test<-toJSON(list(y = I(y)), collapse="")
当您写入文件时,它显示为:
{ "y": [
{
"a": "HELLO",
"b": "WORLD"
}
] }
我想您可以将\ n删除为
test<-gsub("\n","",test)
或使用RJSON包
> rjson::toJSON(list(y = I(y)))
[1] "{\"y\":[{\"a\":\"HELLO\",\"b\":\"WORLD\"}]}"
原因
> names(list(a = "HELLO", b = "WORLD"))
[1] "a" "b"
> names(list(list(a = "HELLO", b = "WORLD")))
NULL
检查rjson::toJSON,您将找到此代码段
if (!is.null(names(x)))
return(toJSON(as.list(x)))
str = "["
因此它似乎需要一个未命名列表才能将其视为JSON数组。也许RJSONIO是类似的。