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

时间:2016-02-16 18:30:52

标签: json r jsonlite

我试图解析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)

我试图从jsonStr转到finalStr

1 个答案:

答案 0 :(得分: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字符串不包含名称。

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