Arrays 使用R为JSON数据添加唯一id

Arrays 使用R为JSON数据添加唯一id,arrays,json,r,nested,Arrays,Json,R,Nested,我是R的初学者。我的情况是我有一个带有嵌套数组的JSON数据集。在JSON文件中,一个机构如下所示: { "website": "www.123.org", "programs": [ { "website": "www.111.com", "contact": "Jim" }, { "website": "www.222.com", "

我是R的初学者。我的情况是我有一个带有嵌套数组的JSON数据集。在JSON文件中,一个机构如下所示:

{
    "website": "www.123.org",
    "programs": [
        {
            "website": "www.111.com",
            "contact": "Jim"
        },
        {
            "website": "www.222.com",
            "contact": "Han"
        }
    ]
}
每个机构可能有一个或多个项目。我在JSON中有100多个机构和近200个程序。我想为每个机构和每个项目的idpr广告id。最后,我希望我能得到一个data.frame,它看起来像:

id idpr website     websitepr   contactpr
1  1    www.123.org www.111.com Jim
1  2    www.123.org www.222.com Han
2  1    www.345.org www.aaa.com Lily
3  1    www.567.org www.bbb.com Jack
3  2    www.567.org www.ccc.com Mike
3  3    www.567.org www.ddd.com Minnie
.........
我尝试编写一个嵌套循环,如下所示: 计数你可以写一个 班级网站{

//将所有数据写入为数据成员

//作为类程序对象的程序

}

并使用jackson api将其转换为字符串。 使用Mapper.writeValueAsString(网站对象)

我们需要一个罐子 1.jackson-core-2.0.2.jar

  • jackson-databind-2.0.2.jar
  • 试试这个:

    # sample data
    json.file <- textConnection('[{"website":"www.123.org","programs":[{"website":"www.111.com","contact":"Jim"},{"website":"www.222.com","contact":"Han"}]},{"website":"www.345.org","programs":[{"website":"www.aaa.com","contact":"Lily"}]},{"website":"www.567.org","programs":[{"website":"www.bbb.com","contact":"Jack"},{"website":"www.ccc.com","contact":"Mike"},{"website":"www.ddd.com","contact":"Minnie"}]}]')
    
    # read the data into an R nested list
    library(rjson)
    raw.data <- fromJSON(file = json.file)
    
    # a function that will process one institution
    process.one <- function(id, institution) {
       website   <- institution$website
       websitepr <- sapply(institution$programs, `[[`, "website")
       contactpr <- sapply(institution$programs, `[[`, "contact")
       data.frame(id, idpr = seq_along(websitepr),
                  website, websitepr, contactpr)
    }
    
    # run the function on all institutions and put the pieces together
    do.call(rbind, Map(process.one, seq_along(raw.data), raw.data))
    #   id idpr     website   websitepr contactpr
    # 1  1    1 www.123.org www.111.com       Jim
    # 2  1    2 www.123.org www.222.com       Han
    # 3  2    1 www.345.org www.aaa.com      Lily
    # 4  3    1 www.567.org www.bbb.com      Jack
    # 5  3    2 www.567.org www.ccc.com      Mike
    # 6  3    3 www.567.org www.ddd.com    Minnie
    
    #示例数据
    json.xml文件