从Json中获取数组?

时间:2015-11-22 08:32:35

标签: php json

我得到一个Json回复:

$response = curl_exec($rest);  
 $json = json_decode($response, true);

我设法通过以下方式获取其值(字符串)

$foundUserId=$json['results'][0]['userId'];
$foundName=$json['results'][0]['name'];
$foundPhoneNum=$json['results'][0]['phoneNumber'];

但最后一个值 - phoneNumber是字符串数组。

如果我尝试循环它,我什么都没有(虽然数组在Json中存在)

  foreach ($foundPhoneNum as &$value) 
    {
      print_r($value);

    }

我做错了什么?

编辑: 杰森:

Array ( [results] => Array ( [0] => Array ( [action] => message [createdAt] => 2015-11-21T09:36:33.620Z [deviceId] => E18DDFEC-C3C9 [name] => me [objectId] => klMchCkIDi [phoneNumber] => ["xx665542","xxx9446"] [state] => 1 [updatedAt] => 2015-11-22T08:24:46.948Z [userId] => 433011AC-228A-4931-8700-4D050FA18FC1 ) ) )  

3 个答案:

答案 0 :(得分:2)

有几种方法可以调试评论中提到的这种情况; print_r()var_dump()

var_dump(),虽然前几次难以阅读,但我最喜欢它,因为它告诉你数组中每个值的数据类型。这将确认预期的字符串是否确实是一个数组。

来自var_dump() documentation

的示例
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);

输出是;

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

如您所见,它显示arrayintstring作为数据类型。

您可能还希望安装Xdebug extension for PHP转储更多有用的错误消息和回溯。前几次再次难以阅读,但非常值得!

答案 1 :(得分:2)

您可能将json作为json中的字符串。这就是为什么在json_decode()之后你仍然在phoneNumber内有json。您有两个选择:

  • 解码phoneNumber,如

    $foundPhoneNum=json_decode($json['results'][0]['phoneNumber']);
    
  • 构建正确的初始json。而不是

    {"phoneNumber": "[\"xx665542\",\"xxx9446\"]"}
    

    应该是

    {"phoneNumber": ["xx665542","xxx9446"]}
    

答案 2 :(得分:1)

foreach ($foundPhoneNum as $value) 
{
      print_r($value);

}

有一个额外的&amp;在$ value之前。试试这个。