PHP循环通过JSON

时间:2013-02-20 18:49:08

标签: php json

对另外一个感到抱歉。

json以这种格式回来:

{
   "data":{
      "internalName":"hotshotgg",
      "name":"HotshotGG",
      "acctId":434582,
      "profileIconId":531,
      "revisionDate":"\/Date(1357002079809)\/",
      "summonerLevel":30,
      "summonerId":407750
   },
   "success":true
}

此处也可以看到:http://elophant.com/developers/docs/summoner

数据正确显示:

Array ( 
    [data] => Array ( 
        [internalName] => nemonorm 
        [name] => nemonorm 
        [acctId] => 28685607 
        [profileIconId] => 544 
        [revisionDate] => /Date(1361354064000)/ 
        [summonerLevel] => 30 
        [summonerId] => 24286314 
    ) 
    [success] => 1 
)

我似乎无法循环并打印出我想要的信息:

$decode= json_decode($url, true);

foreach($decode['data'] as $key => $value) {
    echo  $value['name'] . " <br />";
}

很确定这是显而易见的......但是我看不到它。

3 个答案:

答案 0 :(得分:3)

您必须首先获取URL的内容,例如使用curl:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);

$decode = json_decode($json, true);

然后,看起来你好像在预料到错误的数据结构。如果你想回显data.name那么你就可以访问它。如果你想回显所有数据,那么你需要循环。

// echo the name only:
echo $decode['data']['name'];

// echo all data
foreach($decode['data'] as $key => $value) {
   echo $key . ": " . $value . "<br />";
}

答案 1 :(得分:1)

你的阵列不够深。你拥有的是:

Array (
    [data] => Array (
        [internalName] => nemonorm
        ...
    ) [success] => 1
)

当您遍历$ decoding ['data']时,您获得的值是单个变量,而不是数组。我的意思是$ value是一个字符串,而不是一个数组,所以$ value ['name']毫无意义。你需要的是:

Array (
    [data] => Array (
        [0] => Array (
            [internalName] => nemonorm
            ...
        )
    ) [success] => 1
)

然后,您将遍历一系列结果,而不是单个结果的值。

答案 2 :(得分:0)

很难用我们掌握的信息来判断,但是URL的内容是$ url,还是只是实际的URL?在调用json_decode之前,首先需要获取内容。

类似的东西:

$json = file_get_contents($url);
$decoded = json_decode($json, true);

尝试查看cURL http://php.net/manual/en/book.curl.php以获取另一种获取网址内容的方法。