2017-09-29 7 views
0

거대한 JSON 파일로 R에서 작업하고 있습니다. 이러한 JSON 파일에는 목록에 중첩 된 목록이 있습니다 (등 ...). 그래서 요소의 여러 수준이 있습니다.JSON에서 특정 레벨의 핵심 요소 만 추출 R

내 질문은 내 모든 중첩 목록에 연결된 값을 가져 오지 않고 특정 수준에 저장된 키 요소를 어떻게 추출 할 수 있습니까? 내가 같이 일하고

파일이 같은 더 적은 :

{ 
    "Key 1 at level 1": "value x", 
    "Key 2 at level 1": "value x", 
    "Key 3 at level 1": { 
     "Key 1 at level 2": { 
      "Key 1 at level 3": "value x", 
      "Key 2 at level 3": "value x", 
      "Key 3 at level 3": "value x" 
     }, 
     "Key 2 at level 2": { 
      "Key 4 at level 3": "value x", 
      "Key 5 at level 3": "value x", 
      "Key 6 at level 3": "value x" 
     } 
    } 
} 

그래서,이 예에서, 제가하고 싶은 것은 레벨 2에서 "키 (1)를 포함 할 목록을 검색하는 것입니다 "및"2 단계의 키 2 "를 선택합니다.

당신은이 링크에서 하나의 실제 예를 찾을 수 있습니다 http://bioinfo.hpc.cam.ac.uk/cellbase/webservices/rest/swagger.json이 질문은 이전에 요청 된 경우

죄송합니다 (자르 난의 거대한 때문에). 나는 오랫동안 대답을 찾고 있었지만 아무 것도 찾지 못했습니다.

미리 감사드립니다.

+0

문제의 자신감 파일의 키는 무엇인가? – hrbrmstr

+0

또한 키 또는 값 또는 둘 다 원하십니까? – hrbrmstr

+0

질문 주셔서 감사합니다. 내가 제공 한 실제 예 (swagger link)에서 검색하고자하는 키는 키 "경로"(첫 번째 레벨의 키 5)에 포함 된 키입니다. 보시다시피 "경로"(정확히 97 개 항목)에 여러 값이 포함되어 있습니다. 그리고 각 값은 연관된 값을 갖는 다른 키를 시작합니다. 이 두 번째 수준의 처음 두 키는 "/ {version}/meta", "/ {version}/meta/about"이지만 모두 97을 검색하려고합니다. 그러나이 수준의 키가 필요합니다. 나는이 값들과 관련된 모든 값들을 원하지 않는다. 희망은 분명하다. – Isa

답변

0

이 경우 최상위 값 각각에 키가 있어야합니다. 각 요소를 이름에 매핑하여이 작업을 수행 할 수 있습니다.

이렇게하면 NULL과 문자 벡터가 포함 된 목록이 제공됩니다. 우리는 unlist을 제거하고 NULL을 없애고 단일 문자 벡터로 바꾸십시오.

library('purrr') 
library('tidyverse') 
library('rjson') 

swagger <- fromJSON(' 
    { 
     "Key 1 at level 1": "value x", 
     "Key 2 at level 1": "value x", 
     "Key 3 at level 1": { 
      "Key 1 at level 2": { 
       "Key 1 at level 3": "value x", 
       "Key 2 at level 3": "value x", 
       "Key 3 at level 3": "value x" 
      }, 
      "Key 2 at level 2": { 
       "Key 4 at level 3": "value x", 
       "Key 5 at level 3": "value x", 
       "Key 6 at level 3": "value x" 
      } 
     } 
    } 
') 
map(swagger, names) %>% unlist 

[1] "Key 1 at level 2" "Key 2 at level 2"

+0

감사합니다. 그것은 매우 유용했습니다. 는 귀하의 제안을 적용한 후, 나는 다른 레벨로 다른 파일에 적용하기 위해에 약간 변화했다 : > all_keys <-지도 (자신감, 이름) > all_keys을 레벨 1 ' NULL 에서 $'키 1 수준 $ '키 2 1' NULL $'레벨의 키 (3) 1' [1] "키 1 레벨 2"레벨 1에서 레벨 2 " > all_keys $"키 (3)의 "키 (2) " [1]"레벨 2의 키 1 ""레벨 2의 키 2 " – Isa