我们说我有这些数据:
df <- data.frame(value = c("foo", "bar", "baz"))
一个简单的toJSON
让我知道:
[{"value":"foo"},{"value":"bar"},{"value":"baz"}]
但是如果我需要将值作为单个元素数组,我该如何构造原始数据?我尝试了一些涉及c()
,list()
和I()
的变体。没有什么能让我得到这个输出:
[{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]
答案 0 :(得分:5)
要获得所需的排列,您需要一个列表列表
jsonlite::toJSON(list(list("value"="foo"), list("value"="bar"), list("value"="baz")))
# [{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]
我们可以在tidyverse函数mutate_all
的帮助下将所有列转换为列表。
library(tidyverse)
df %>% mutate_all(as.list) %>% jsonlite::toJSON()
# [{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]
答案 1 :(得分:4)
您可以将列表传递给toJSON
函数。
library(jsonlite)
df <- data.frame(value = c("foo", "bar", "baz"))
# Iterate over rows and put them to list
# Output passed to toJSON output
toJSON(apply(df, 1, as.list))
# [{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]
像这样的toJSON
输入是:
apply(df, 1, as.list)
[[1]]
[[1]]$value
[1] "foo"
[[2]]
[[2]]$value
[1] "bar"
[[3]]
[[3]]$value
[1] "baz"