2014-07-18 101 views
0
[{"name":"se","value":"test1"},{"name":"model","value":"test2"},{"name":"filter_preference","value":"test3"},{"name":"seved","value":"test4"}] 

我有json,我想解析它,並得到「segment」=>「test1」 等等。如何在PHP中解析Json數據?

我已經做到了這一點

$json2= json_encode($loadFilter); 
    $json2 = json_decode($json2, true); 

    foreach ($json2->$key as $value) 
    { 
     echo $key ."=>".$value; 
    } 

總是得到的foreach爲無效的論點提供()!

我這樣做WP Ajax回調。

回答

3

你的foreach語法是錯誤的訪問$關鍵。從您的意見

foreach ($json2 as $key => $value) { 
    echo $key ."=>".$value; 
} 

編輯:

你沒有給你的問題「真實」的格式,你的陣列包含在「filter_preference」,所以你必須遍歷json2 $ ['filter_preference 「]。

foreach ($json2['filter_preference'] as $key => $value) { 
    echo $key ."=>".$value; 
} 
+0

如果你想使用數組這點,你可以反對使用下面的代碼轉換爲數組Thx回覆,我已經嘗試過了,我得到了關鍵filterpreference這是列的名稱,其餘的是價值,但我怎麼能到「段」 - 「test1」?! – user3042036

+0

@ user3042036您可以添加$ loadFilter變量的'var_dump'嗎? – Sugar

+0

我得到對象(stdClass的)#7188(1){ [ 「filter_preference」] => 串(378) 「」[{\\\ 「名稱\\\」:\\\ 「段\\\」, \\\ 「價值\\\」:\\\ 「Test1的\\\」},{\\\ 「名稱\\\」:\\\ 「模式\\\」,\\\「價值\\\ 「:\\\」 \\\ 「},{\\\」 名稱\\\ 「:\\\」 filter_preference \\\ 「\\\ 」值\\\「:\\\」 的Test2 \\ \「}]」「 } – user3042036

1

您需要映射子數組的鍵值。 試試這個:

foreach ($json2 as $key=>$value) 
     { 
      echo $key ."=>".$value; 
     } 
+0

THX用於回覆,我已經盡力了,我得到它是列名關鍵filterpreference,剩下的就是價值,但我怎麼能到「段」 - 「測試1」?! – user3042036

0

一個奇怪的建議在這裏:

function objectToArray($d) { 
     if (is_object($d)) { 
      // Gets the properties of the given object 
      // with get_object_vars function 
      $d = get_object_vars($d); 
     } 

     if (is_array($d)) { 
      /* 
      * Return array converted to object 
      * Using __FUNCTION__ (Magic constant) 
      * for recursive call 
      */ 
      return array_map(__FUNCTION__, $d); 
     } 
     else { 
      // Return array 
      return $d; 
     } 
    } 

$array_new = objectToArray($json2); 

http://wonderphp.wordpress.com/2014/03/20/convert-object-to-array-and-vice-versa/