2012-04-26 107 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){... 

在for循環的問題是,$關鍵是一個整數(不是實際值)和$值是單詞「陣列」(不實際值)。

+0

看看你的結構,看看你如何試圖訪問它。 $ stuff是一個對象數組(或者我認爲它將被轉換爲PHP的一個數組數組)。 – Corbin 2012-04-26 21:45:38

+0

你的JSON解碼給我NULL(沒有什麼工作正常):http://codepad.org/meAoAn0a – hakre 2012-04-26 22:28:59

回答

3

它正在做它應該做的。問題是你不太理解它。

「stuff」是一組對象。所以,當你對其進行解碼,得到的PHP數組是這樣的:

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

所以,當你調用它foreach,你從那裏獲得單獨的陣列。

我想你的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"}]這是你的數組,所以key = 0對應於對象{"widget":"dd"}等等第四。

要找到元素,請嘗試:$value->widget$value->thing

由於stuff數組中的對象並不都具有相同的成員,所以您可能希望重新考慮構造對象的方式。

1

更改您的JSON到

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

這樣的東西包含另一個字典像結構。

在你的例子中,你使用[]誰來封裝一個數組,而不是一個json對象,因此你所擁有的整數只是項目的索引{「widget」:「dd」},{「thing 「:」cc「}和{」wcha「:」dd「}。對於你的第一次迭代$ value [「widget」]應該等於「dd」。