使用单元素数组将数据框转换为 JSON
Convert data frame to JSON with single-element arrays
假设我有这个数据:
df <- data.frame(value = c("foo", "bar", "baz"))
一个简单的 toJSON
让我得到这个:
[{"value":"foo"},{"value":"bar"},{"value":"baz"}]
但是如果我需要将值作为单个元素数组,我该如何构造原始数据?我尝试了一些涉及 c()
、list()
和 I()
的变体。没有什么可以让我得到这个输出:
[{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]
您可以将列表传递给 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"
要得到你想要的排列,你需要一个列表列表
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"]}]
假设我有这个数据:
df <- data.frame(value = c("foo", "bar", "baz"))
一个简单的 toJSON
让我得到这个:
[{"value":"foo"},{"value":"bar"},{"value":"baz"}]
但是如果我需要将值作为单个元素数组,我该如何构造原始数据?我尝试了一些涉及 c()
、list()
和 I()
的变体。没有什么可以让我得到这个输出:
[{"value":["foo"]},{"value":["bar"]},{"value":["baz"]}]
您可以将列表传递给 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"
要得到你想要的排列,你需要一个列表列表
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"]}]