2014-07-18 77 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/