2013-10-10 3 views
0

과 함께 추가합니다. 초보자 인 R입니다. 내 상황은 중첩 배열이있는 JSON 데이터 집합입니다. JSON 파일에서 한 기관은 다음과 같습니다JSON 데이터의 고유 ID를 R

각 기관에
{ 
    "website": "www.123.org", 
    "programs": [ 
     { 
      "website": "www.111.com", 
      "contact": "Jim" 
     }, 
     { 
      "website": "www.222.com", 
      "contact": "Han" 
     } 
    ] 
} 

, 거기에 하나 개의 프로그램이 될 수 있습니다 이상일 수있다. JSON에는 100 개 이상의 기관과 거의 200 개의 프로그램이 있습니다. 나는 각 프로그램에 대한 각 기관 및 idpr의 광고 ID를 원합니다. 수 < -0 (N json_data에서) { 수 < -count에 대한 :이 같은 중첩 루프를 작성하려고

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 
......... 

: 마지막으로, 내가 좋아하는 내가 보이는 data.frame을 얻을 수 있기를 바랍니다 1 ID < -c (ID, 계산) 웹 사이트 < -c (웹 사이트, n 개의 $ 웹 사이트) countpr (I n 개의 $ 프로그램에서) { ID < -c에 대한 < -1 (ID, 계산) 웹 사이트 < -c (웹 사이트, n $ 웹 사이트) idpr < -c (IDPR, countpr) < -c (websitepr, 나는 $ 웹 사이트) contactpr < -c (contactpr, 나는 $ 접촉) countpr < -countpr + 1 } } websitepr 그러나이 중첩 된 루프는 할 수 없습니다 나에게 원하는 결과를 줘. 도와 주셔서 감사합니다!

답변

0

이 시도 :

# 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 
0

당신은 클래스 웹 사이트 쓸 수 {

을 // 쓰기 모든 데이터 구성원으로

// 프로그램 클래스 프로그램의 목적

로}

및 변환 잭슨 API를 사용하여 그것을 문자열로. Mapper.writeValueAsString (웹 사이트의 목적)이 필요

항아리를 사용 는 1.jackson 코어-2.0.2.jar

  1. 잭슨 - 데이터 바인딩-2.0.2.jar입니다.