2012-04-26 4 views
0

PHP 스크립트를 변경하여 JSON 오브젝트를 수신하고 주어진 JSON 오브젝트로 작업 할 수 있도록하려고합니다. for 루프를 사용하여 변환 된 JSON 배열 객체 (일명 '물건')를 순환 시키려고 할 때까지 모든 것이 잘 작동합니다.PHP JSON 디코드

내가 잘못 여기서 뭐하는 거지 :

$json = '{ 

    "foo": "hi", 
    "bar": "bye" 
    "stuff": [{"widget":"dd"},{"thing":"cc"},{"wcha":"dd"}] 
}'; 

$arr = json_decode($json, true); 
$foo = $arr['foo']; //works fine 
$bar = $arr['bar']; //works fine 

//old way that worked: 
//$stuff = array("widget" => "dd", "thing" => "cc", "wcha" => "dd"); 
//new way that does not work: 
$stuff = $arr['stuff']; 
... 

//This is where the problem is: 
foreach ($stuff as $key => $value){... 

루프의에서 문제 것은 (즉, $ 키는 정수 (안 실제 값)이며, $ 값이 단어 '배열'입니다하지 실제 값).

+0

구조를보고 어떻게 액세스하려고하는지보십시오. $ stuff는 객체 배열입니다 (또는 배열 배열은 PHP로 변환 될 것입니다). – Corbin

+0

json 디코드가 NULL을 제공합니다 (아무 문제가 없습니다). http://codepad.org/meAoAn0a – hakre

답변

3

정확히 무엇을해야하는지. 문제는 당신이 그것을 올바르게 이해하고 있지 않다는 것입니다.

"stuff"는 개체의 배열입니다. 당신이 그것을 디코딩 때, 결과 PHP 배열은 이것이다 : 당신이 그것에 foreach를 호출 할 때

[stuff]=> 
array(3) 
    { 
    [0]=> 
    array(1) 
    { 
    [widget]=>string(2) "dd" 
    } 
    [1]=> 
    array(1) 
    { 
    [thing]=>string(2) "cc" 
    } 
    [2]=> 
    array(1) 
    { 
    [wcha]=>string(2) "dd" 
    } 
    } 

그래서, 당신은 거기에서 각각의 배열을 받고 있습니다.

나는 당신의 JSON이 있어야한다고 생각 :

"stuff": {"widget":"dd","thing":"cc","wcha":"dd"} 

어느 쪽이든, 또는 PHP 코드가 있어야한다 :

foreach($stuff as $element) { 
    list($key,$value) = each($element); 
    // now do stuff 
} 
2

물론 $key은 정수입니다. [{"widget":"dd"},{"thing":"cc"},{"wcha":"dd"}] 이것은 배열이므로 키 = 0은 객체 {"widget":"dd"}과 네 번째에 해당합니다.

요소를 얻으려면 $value->widget 또는 $value->thing을 시도하십시오.

스터프 배열의 개체가 모두 동일한 멤버가 아니므로 개체를 구조화하는 방법을 다시 생각해 볼 수 있습니다.

1

변경하여 JSON

$json = '{ 
    "foo": "hi", 
    "bar": "bye" 
    "stuff": {"widget":"dd", 
      "thing":"cc", 
      "wcha":"dd"} 
}'; 

에 이런 식으로 물건 포함 구조와 같은 또 다른 사전.

예에서 json 객체가 아닌 배열을 캡슐화하는 데 사용되는 []를 사용하고 있으므로 정수는 단순히 항목 { "widget": "dd"}, { "thing ":"cc "} 및 {"wcha ":"dd "}를 배열에 추가하십시오. 첫 번째 반복을 위해 $ value [ "widget"]은 "dd"와 같아야합니다.