2

我正在尝试从 API 解析一些结果。API 返回给定值的 JSON 结果。API 一次只能处理一个值,所以我lapply要获得所有结果。<- 如果这是一个糟糕的起点,很高兴这里有一个更好的方法!

每个 JSON 响应都有一些嵌套信息。我正在尝试将数据放入一个单独的 data.frame 并解析嵌套结构。

在下午的大部分时间里,我一直在玩 jsonlite 和 purrr,试图让它工作并具有理想的弹性。

如何使用 R 成功地将嵌套的 json 结构转换为用于多个 json 文档/记录的 data.frame?

MRE

library(jsonlite)
a <- LETTERS[1:5]
b <- letters[1:5]
c <- rep(data.frame(d=LETTERS[1:5]),5)

strSetup <- list(a, b, c)
dfSetup  <- data.frame(a, b, c)

jsonStr <- toJSON(rep(strSetup,3))

finalStr <- rbind(dfSetup,dfSetup,dfSetup)

我正在尝试从jsonStrfinalStr

4

1 回答 1

0

如果我理解正确,您将 API 返回的所有 JSON 字符串存储到字符向量中。这意味着您示例的第 9 行有点偏离,这应该可以工作。

library(jsonlite)
a <- LETTERS[1:5]
b <- letters[1:5]
c <- rep(data.frame(d=LETTERS[1:5]),5)

strSetup <- list(a, b, c)
dfSetup  <- data.frame(a, b, c)

jsonStr <- rep(toJSON(strSetup),3)

finalStr <- rbind(dfSetup,dfSetup,dfSetup)

finalStr2 <- do.call(
  what = rbind,
  args = lapply(
    X = jsonStr,
    FUN = function(x){
      data.frame(fromJSON(x))
      }
    )
  )

print(all(finalStr == finalStr2))

需要注意的是names(finalStr) != names(finalStr2)。但是,我不认为这是可以避免的,因为您指出您从 API 接收的 JSON 字符串不包含名称。

如果我误解了,请告诉我。

于 2016-02-16T20:04:31.000 回答