JSON到R数据框:保留重复的值

我有一个
JSON数据源,它是一个对象列表.一些对象属性本身就是列表.我想将整个事物转换为数据帧,将列表保留为数据帧值.

示例JSON数据:

[{
    "id": "A",
    "p1": [1, 2, 3],
    "p2": "foo"
},{
    "id": "B",
    "p1": [4, 5, 6],
    "p2": "bar"
}]

期望的数据框:

  id  p2      p1
1  A foo 1, 2, 3
2  B bar 4, 5, 6

尝试失败1

我找到了解析我的JSON这种非常直接的方法:

unlisted_data <- lapply(fromJSON(json_str), function(x){unlist(x)})
data.frame(do.call("rbind", unlisted_data))

但是,未列出的进程会在多个列中传播我重复的值:

  id p11 p12 p13  p2
1  A   1   2   3 foo
2  B   4   5   6 bar

我期望使用recursive = FALSE选项调用unlist会处理这个问题,但事实并非如此.

尝试失败2

我注意到我几乎可以使用I函数执行此操作:

> data.frame(I(parsed_json[[1]]))
   parsed_json..1..
id                A
p1          1, 2, 3
p2              foo

但是行和列是相反的.转置结果会破坏重复的数据:

> t(data.frame(I(parsed_json[[1]])))
                 id  p1        p2   
parsed_json..1.. "A" Numeric,3 "foo"

最佳答案 jsonlite包可以处理这个很好:

library(jsonlite)
fromJSON(txt)
#  id      p1  p2
#1  A 1, 2, 3 foo
#2  B 4, 5, 6 bar

fromJSON(txt)$p1
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 4 5 6
点赞