2010-06-15 6 views
0

거대한 청크가 너무 커서 수동으로 파일을 편집 할 수 없으며이를 읽어야하고 잘못된 작업을 확인하기 위해 정규 표현식 연산을 수행해야합니다.엄청난 양의 JSON 데이터를 디버깅하는 데 도움이 필요합니다.

기본적으로 - 내 서버는 PHP 5.1.6이며 업데이트 할 수 없습니다. 이 기능은 이전 버전 인 json_decode이 5.2/5.3 버전보다 기능이 적습니다.

json_decode은 NULL을 반환하고 json_last_error이 호출되지만 PHP 5.3 이외의 다른 함수는 존재하지 않으므로 수동으로 잘못된 것을 확인하려고합니다.

$regex = '#[^0-9"$a-zA-Z{:}().]#'; 
$json = preg_replace($regex, '', $json); 
$tree = json_decode ($json, true); 

var_dump($tree); // NULL 

JSON 니펫 .. 중간 어딘가에

{ "109"0 "(103)"1 "(102)"59 "(101)"70 " 100 ": 4299,"94 ": 0,"50 ": 51,"46 ": 0,"45 ": 0,"44 ": 0,"43 ": 0,"42 " 0 ","18 ": 0,"17 ": 1,"16 ": 1,"13 ": 160,"8 ": 4298}},"2 ": {"d " { "109": 0, "103": 92, "102": 54, "101": 53, "100": 4301, "94": 0, "50": 4278, "49": 328, 46 ": 1,"45 ": 0,"44 ": 1,"43 ": 0,"42 ": 0,"26 ": 0,"23 ": 0,"22 " : 0, "17": 1, "16": 1, "8": 4300}, "m": { "94": 1, "100": 1, "26": 1, "50": 1 , "8": 1, "49": 1, "18": 1, "43": 1, "42": 1, "109": 1}, "c": { "/": { "d ": {"109 ": 0,"100 ": 4301,"94 ": 0,"50 ": 4278,"49 ": 328,"43 ": 0,"42 ": 0,"26 ": 0 , "18": 0, "8": 4300}}, "G": { "d": { "109": 1, "100": 4303, "94": 1, "68" 50 ": 64,"49 ": 53,"4 0 ","18 ": 1,"13 ": 2216,"11 ": 0,"8 ": 4302}}}},"3 ":

}}}}은 의심 스럽지만 아마도 4 개의 중첩 된 개체 리터럴을 닫을 것입니다.

통찰력을 주셔서 감사합니다.

+0

나는 정규 표현식으로 더 나아지기 시작했다. 그러나 주변의'#'는 무엇을 하는가? – hookedonwinter

+0

시도했는지 모르겠지만 두 도구 모두 URL에서 JSON 데이터를로드하므로 시도해 볼 가치가 있습니다. http://jsonviewer.stack.hu/ http://jsonformatter.curiousconcept.com/ –

+0

#hookedonwinter - 정규 표현식의 표기법. 가장 일반적으로'/' –

답변

0

데이터를 JSON 포맷터/유효성 검사기를 통해 여러 번 실행했지만 유효했습니다. 데이터 세트가 너무 커서 VIM을 사용하여 중첩 된 객체를 죽이는 작업은 많은 작업입니다.

이 데이터 세트를 로컬에서 실행할 수 있으므로 PHP 5.2 및 5.3에서 PHP 5.1에 대해 중첩 된 제한 인 20으로 문제가 있다고 결론을 내릴 것입니다.

1

PEAR Services_JSON 클래스를 사용해 보셨습니까? 보다 유용한 오류를 줄 수 있으며 이전 버전의 PHP에서 제대로 실행됩니다.

관련 문제