json_decode不能正常工作

时间:2015-10-19 20:08:52

标签: php json decode

我在解码JSON数据时遇到问题。 有人知道为什么没有设置变量$clanid吗?

这是代码:

$url = "http://185.112.249.77:9999/Api/Search?search=&level=1&min=1&max=50&points=48000";
$jsondata = file_get_contents($url);
$data = json_decode($jsondata, true);

foreach ($data->clanList as $clan) {

$clanid = $clan->id;
echo $clan->id;
}

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

json_decode的第二个参数采用布尔值。如果设置为true,则将输出强制为数组。它默认为false,它将解码为对象,这是您需要的

$data = json_decode($jsondata); //removed boolean arg

答案 1 :(得分:2)

由于您使用true作为第二个参数调用json_decode,因此您的json对象将解码为关联数组而不是对象,因此foreach应为

foreach($data['clanList'] as $clan

查看php manual

  

<强> ASSOC

     

当为TRUE时,返回的对象将被转换为关联数组。

答案 2 :(得分:1)

您正在尝试检索为对象。它不可能因为你解码第二个参数说json输出是在关联数组中。请遵循以下代码

   <?php
//get the result from the url by using file_get_contents or curl
    $jsondata = file_get_contents("http://185.112.249.77:9999/Api/Search?search=&level=1&min=1&max=50&points=48000");
//decode the json in associative array by putting true as second parameter
    $data = json_decode($jsondata, true);
//fixed array is chosen, clanList is fixed so stored clanList in $in
    $in=$data['clanList'];
//for each element of clanList as key=>value nothing but "element":"value"
//for subarray in clanList use another foreach
    foreach ($in as $key=>$value) {
//to fetch value of element for each key          
    $clanid = $in[$key]['id'];
    echo $clanid;
    }
    ?>

答案 3 :(得分:0)

您有一个即时错误和一个潜在错误。

带有第二个参数true的json_decode()将返回一个关联数组(如果可以的话)。因此,foreach(和其他引用)应该使用数组索引而不是对象字段。

添加true似乎是故意的,所以我假设您希望将数据用作关联数组而不是对象。您当然可以删除true参数。

由于您有外部数据源,因此可能仍会出现错误。例如,json_decode()也可以在无效的JSON上返回false。

如果您使用的是PHP 5.5,则可以使用json_last_error_msg来检索邮件。否则你可以回到json_last_error

正确的(大部分)错误验证代码如下所示:

$url = "http://185.112.249.77:9999/Api/Search?search=&level=1&min=1&max=50&points=48000";
$jsondata = file_get_contents($url);
$data = json_decode($jsondata, true);
if($data === false) { // check for JSON errors as well.
    die(json_last_error());
}

foreach ($data['clanList'] as $clan) { // use array syntax here.
    $clanid = $clan['id']; // Use array syntax here.
    echo $clanid;
}

编辑:添加了关于根据其他建议也可能删除true的说明

答案 4 :(得分:0)

首先你应该检查是否返回了json,然后将其解压缩。问题是,当json被解码时将变为0,1,2,3等,你将无法获得clanList。为此,您需要使用array_values

$url = "http://185.112.249.77:9999/Api/Search?search=&level=1&min=1&max=50&points=48000";
$jsondata = file_get_contents($url);
$data = json_decode($jsondata, true);
$get_indexes = array_values($data);

if ($jsondata) {
    foreach ($get_indexes as $clan) {
    $clanid = $data[$clan]['id'];
    echo $clanid;
    }   
} else {
exit("failed to load stream");
}