使用RJSONIO和AsIs类

时间:2012-07-10 22:31:31

标签: json r text

我正在编写一些辅助函数来将我的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中的换行符。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

尝试写作

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是相似的。