0

我想与需要某种格式的 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 中完成,我不会为此感到难过)。

谢谢。

4

0 回答 0