使用单元素数组将数据框转换为JSON

时间:2018-02-05 19:31:00

标签: json r jsonlite

我们说我有这些数据:

df <- data.frame(value = c("foo", "bar", "baz"))

一个简单的toJSON让我知道:

[{"value":"foo"},{"value":"bar"},{"value":"baz"}]

但是如果我需要将值作为单个元素数组,我该如何构造原始数据?我尝试了一些涉及c()list()I()的变体。没有什么能让我得到这个输出:

[{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]

2 个答案:

答案 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"
相关问题