我在解码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;
}
提前感谢您的帮助。
答案 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
<强> 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");
}