如何使用rjson强制将字符编码为数组?

时间:2015-10-29 10:11:31

标签: json r

比长篇文章更好,让我们从一个例子开始:

library(rjson)
toJSON(list(names = c("paul")))
# [1] "{\"names\":\"paul\"}"
toJSON(list(names = c("paul", "henri")))
# [1] "{\"names\":[\"paul\",\"henri\"]}"

在第一个示例中,names是一个字符串,而在第二个示例中,names是一个数组。我想在这种特殊情况下强制R总是渲染一个数组。

注意:我也尝试过RJSONIO库,但这会对所有内容进行编码。例如,我仍然希望国家成为一个字符串。

library(RJSONIO)
toJSON(list(county="France", names = c("paul")), asIs = T)
# [1] "{\n \"county\": [ \"France\" ],\n\"names\": [ \"paul\" ] \n}"

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

非常类似的包RJSONIO中,您可以使用asIs参数将单个数字表示为向量(因为它总是发生在R中):

library(RJSONIO)
toJSON(list(names = c("paul")),asIs=TRUE)

# result:
# [1] "{\n \"names\": [ \"paul\" ] \n}"

否则,如果你想坚持rjson包,你可以利用列表总是转换为向量的事实(即使它们只包含一个值):
(请注意,这也适用于RJSON包含asIs = FALSE,因为正如我所说,它们非常相似)

library(rjson)
toJSON(list(country="France", names = list("paul")))
# or: toJSON(list(country="France", names = as.list(c("paul"))))

# result:
[1] "{\"country\":\"France\",\"names\":[\"paul\"]}"