2011-04-26 5 views
3

이것은 멍청한 질문입니다. 나는 다음과 같은 모습의 JSON 파일로 작업하고있다.PHP로 JSON 데이터 구문 분석하기

{"nodes": 
    [{"node": 
    {"Vocabulary name":"Bestseller Format", 
     "Term":"Hardcover Fiction", 
     "Bestseller1":"9780470227800", 
     "Bestseller2":"9781451617962", 
     "Bestseller3":"9781439167397", 
     "Bestseller4":"9781617750106", 
     "Bestseller5":"9780385533300", 
     "Bestseller6":"9780670022526", 
     "Bestseller7":"9781609530358", 
     "Bestseller8":"9780132358040", 
     "Bestseller9":"9780596159771", 
     "Bestseller10":"9780151014163", 
     "Bestseller11":"9780393334807", 
     "Bestseller12":"9780805090161"} 
    }] 
} 

그리고 나는 PHP로 파싱을 시도하고있다. 베스트 셀러 형식 - 나는

<?php  
    $jsonurl = "http://www.xtracrunchy.com/pandpnewlook/?q=pandp/bestsellers"; 
    $json = file_get_contents($jsonurl,NULL, NULL, 0, 1000); 
    $json_output = json_decode($json,true); 

    $bestseller_array = $json_output[nodes][0][node]; 

    foreach ($bestseller_array as $key => $value) 
    { 
    print $key; 
    print " - "; 
    print $value; 
    print "<br />"; 
    } 

?> 

가 나는이 스크립트가

어휘 이름을 실행할 때 결국 베스트 셀러 ISBN의의 정렬 된 목록하지만 내가 할 수있는 유일한 출력을 구축 할 수 있도록하고 싶습니다 스크립트와 함께 올라와있다 용어 - 양장본

그리고 인쇄 매수 ($ bestseller_array)를 추가 할 때; 배열에 2 요소 만 가져옵니다.

도움을 주시면 감사하겠습니다.

+0

'code' 태그로 코드를 넣을 수 있습니까? 그리고 모든 것을 읽을 수있게 ... 고마워요 : D – fingerman

+0

직접 포맷팅을 고쳤습니다. 다음 번에는 각 코드 줄 앞에 4 칸을 추가하십시오. – Christian

+0

덕분에 @christian – fingerman

답변

1

첫째, 난 강력하게 some occasions, 그것은 작동하지 않습니다 때문에, 대신 file_get_contents()의 CURL의 사용을 권장합니다. 그러나 그것이 문제의 일부가 아니기 때문에, 나는 이것에 대해 더 이상 이야기하지 않을 것입니다.

둘째, 이름이없는 리터럴 상수를 사용하고 있으며, 이는 매우 나쁨입니다.

$json_output[nodes][0][node]; 

은 다음과 같아야합니다

$json_output['nodes'][0]['node']; 

documentation here on why를 참조하십시오.

마지막으로 위에 쓴 JSON 문자열이 해당 URL에 반환되는 문자열과 일치하지 않으며이 "새로운"json에서 스크립트가 예상대로 작동합니다.

+0

감사합니다. 이것은 실제로 도움이되었습니다. 그것은 여전히 ​​작동하지 않지만 이런 종류의 올바른 방향으로 나를 가리 킵니다. – flakes

1

@flakes 당신이 당신의 $의 jsonurl에서 당신이 가지고있는 URL을 방문 할 경우에만 얻을 :

{"nodes":[{"node":{"Vocabulary name":"Bestseller Format","Term":"Hardcover Fiction"}}]} 

은 당신이 URL에서 뭔가 빠진하지 않을 확실합니까?

0

서버의 출력이 예상 한 것과 일치하지 않습니다. 도움이

var_dump($json); 
//string(87) "{"nodes":[{"node":{"Vocabulary name":"Bestseller Format","Term":"Hardcover Fiction"}}]}" 

희망 ...의