我想与需要某种格式的 API 通信,见下文:
library(jsonlite)
list(limits = list("Overall_Wave3/0" = unbox("14000"),
"Overall_Wave3/1" = unbox("14005")))
它给出(注意该列表的索引是 [x]):
$limits
$limits$`Overall_Wave3/0`
[x] "14000"
$limits$`Overall_Wave3/1`
[x] "14005"
现在在我的现实生活用例中,我需要在一个列表中创建数百个这样的元素,所以我需要以某种方式使事情自动化。我的输入将是我需要放入该格式的数据框(或小标题)。然而,我得到了这个工作,只是没有成功地完成拆箱。即这是我走了多远:
library(tidyverse)
library(jsonlite)
dat <- data.frame(marker = c("Overall_Wave3/0", "Overall_Wave3/0"),
value = c(14000, 14005)) %>%
mutate(value = as.character(value))
args <- as.list(dat$value)
names(args) <- dat$marker
list(limits = args)
这给出了(请注意,索引现在是 [1] 而不是 [x]:
$limits
$limits$`Overall_Wave3/0`
[1] "14000"
$limits$`Overall_Wave3/0`
[1] "14005"
现在将两个列表都转换为 JSON 正文,并toJSON(...)
给出不同的结果:
- 第一个命令给出:
{"limits":{"Overall_Wave3/0":"14000","Overall_Wave3/0.1":"14005"}}
- 第二个命令给出:
{"limits":{"Overall_Wave3/0":["14000"],"Overall_Wave3/0.1":["14005"]}}
第二个命令在不能存在的数字周围有不必要的方括号。我知道我可能可以用字符串替换来破解,但我更喜欢从一开始就有效的解决方案(如果它可以在 tidyverse 中完成,我不会为此感到难过)。
谢谢。