将具有嵌套结构的 JSON 列表折叠成单个 data.frame

Collapse list of JSON with nested structures into single data.frame

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

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

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

如何使用 R 将嵌套 json 结构成功转换为 data.frame 用于多个 json documents/records?

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

如果我没理解错的话,您正在将 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 字符串不包含名称。

如果我理解有误,请告诉我。