2014-07-20 3 views
1

'JSON'파일을 R의 데이터 프레임으로 변환하려고하는데 많은 성공을 거두지 못하고 있습니다.JSON 파일을 '비표준 형식'으로 구문 분석하십시오.

나는 RJSON과 RJSONIO를 사용해 보았지만 두 가지 모두 내 데이터 형식에 대해 동일한 이의가 있으며 첫 번째 집합 {} 사이의 값만 반환하는 것으로 보입니다. 당신이 볼 수 있듯이} {사이에 쉼표가 없습니다 - 그것은 내가 ++ 메모장에서 열면 보이는 정확히

{"response time":"1075","_p":"99ae8e5f1eb64091c019e57ff0e686d3","_t":1397514301} 
{"_n":"searcher","version":"v4","mobile":"No","_p":"1797370","_t":1397514315} 
{"month":"April","_n":"shown availability","availability":"unavailable","_t":1397514320} 

이것은 : 여기 내 데이터의 예입니다.

목표는 각 {}이있는 행을 각 유형에 대한 열과 함께 표로 변환하는 것입니다. "_p", "_n", "_t"등. 내 데이터의 들쭉날쭉 한 특성을 처리하기 위해 plyr을 사용할 수 있음을 알고 있습니다.

이 문제에 접근하는 방법에 대한 도움을 주시면 감사하겠습니다.

+0

R. –

+0

에서 데이터 프레임을 어떻게 표시해야하는지에 대한 예제를 제공하십시오. 또한 각 샘플 라인의 끝에 쉼표를 추가 할 수 있습니다. 'gsub ("\\ n", ", \ n", x)'. 이렇게하면 줄 바꿈 문자가 쉼표로 바뀌고 줄 바꿈 문자로 바뀝니다. 또는 중괄호 사이에 줄 바꿈 문자가없는 경우 'gsub ("} {", "}, {", x, fixed = TRUE) –

+0

감사합니다. 리처드 (Richard)는 질문을 확장하여 출력에 대한 간략한 요약을 제공했습니다. 얼마나 정확하게 fromSSON 함수에 gsub을 통합합니까? – Jacob

답변

2
text <- '{"response time":"1075","_p":"99ae8e5f1eb64091c019e57ff0e686d3","_t":1397514301} 
{"_n":"searcher","version":"v4","mobile":"No","_p":"1797370","_t":1397514315} 
{"month":"April","_n":"shown availability","availability":"unavailable","_t":1397514320}' 


library(rjson) 
json.text <- readLines(textConnection(text)) 
# parse JSON into named list 
json  <- lapply(json.text,fromJSON) 
library(plyr) 
result <- do.call(rbind.fill,lapply(json,as.data.frame,optional=T)) 
result 
# response time        _p   _t     _n version mobile month availability 
# 1   1075 99ae8e5f1eb64091c019e57ff0e686d3 1397514301    <NA> <NA> <NA> <NA>   <NA> 
# 2   <NA>       1797370 1397514315   searcher  v4  No <NA>   <NA> 
# 3   <NA>        <NA> 1397514320 shown availability <NA> <NA> April unavailable 

주 :

  1. 귀하의 JSON 마지막에, 부정한다 : ,"trip "_t":1397514320} 구문 분석하지 않습니다. 따라서 이것이 실제 텍스트 파일이라면 무엇을해야할지 모르겠습니다. 이 예에서는 "trip을 제거하고 마지막 변수는 "_t"으로 남겨 둡니다.
  2. optional=T 또는 as.data.frame(...)이 필요합니다. 특히 _으로 시작하는 열 앞에 X을 추가하여 열 이름을 "수정"하려고합니다.

편집 코멘트 스레드에 대한 응답. 파일이 잘 형성 JSON해야 않습니다 그러나

json  <- lapply(json.text,fromJSON,unexpected.escape="keep") 

주 - 더 } 누락 : 당신의 JSON은 백 슬래시 문자가있는 경우

, 당신은 같이 fromJSON(...)에 호출에서 unexpected.escape=... 매개 변수를 설정 할 수 없다 등등. 그렇지 않으면 fromJSON(...)이 실패합니다.

+0

이것은 매우 유망 해 보입니다. 내가 해결할 수없는 한 가지 방법은 파일에서 데이터를 가져 오는 것입니다. 이 경우 내 파일은 "testdata.json"입니다. 감사. (btw는 잘못된 데이터를 수정하는 것이 옳았습니다. 더 읽기 쉽게하려고 할 때 실수였습니다.) – Jacob

+0

'json.text <- readLines ("testdata.json")' – jlhoward

+0

을 사용합니다. 정말 가까이에! 그건 꽤 작동하지 않습니다, 왜냐하면 readLines() json 데이터에 약간 이상한 일을하기 때문에 생각합니다. \ "1075 \", \ "_ p \": \ "99ae8e5f1eb64091c019e57ff0e686d3 \", \ "_ t \": 1397514301}, " – Jacob

관련 문제