这是我的PHP / JSON代码:
$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$json=str_replace('},
]',"}
]",$json);
$decoded= json_decode($json);
$data=$decoded->matches[0];
foreach ($data as $value) {
print_r($value->team1->logo_url);
}
现在我遇到以下问题
注意:尝试获取非对象的属性
和
注意:未定义的属性:stdClass :: $ team1
我只想使用foreach loop
,然后以HTML格式显示结果。
为什么我会得到上述两个问题?如何才能显示正确的结果?
答案 0 :(得分:1)
我已检查过你的代码,并有一些注意事项,希望能找到解决方案:
1-您正试图从JSON数据中获取非现有密钥,这是告诉您的消息。
2-我仍然不确定你从JSON API得到了什么。但对于dailydota2 documentation而言,team1下没有任何名为image_url的东西。我想你正在寻找logo_url或类似的东西。
3-不要像在代码中那样更改JSON的格式,因此请删除以下行:
$json=str_replace('}, ]',"} ]",$json);
将API的主JSON输出保留为默认值。
4-当您尝试从解码的JSON / Array中获取特定密钥时,请使用以下方法:
$data = $decoded->{'matches'};
代替
$data=$decoded->matches[0];
参考:http://php.net/manual/en/function.json-decode.php
5-最后你的foreach loop
正在运作但需要正确的密钥:
foreach ($data as $value) {
print_r($value->team1->logo_url);
}
当所有这些步骤完成后,它应该有效。
以下是您最终更正的代码:
$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$decoded = json_decode($json);
$data = $decoded->{'matches'};
foreach ($data as $value) {
print_r($value->team1->logo_url);
echo '<img src="http://dailydota2.com/' . $value->team1->logo_url . '">';
}
它返回以下输出,我没有收到任何错误。
/images/logos/teams/cdecgaming.png/images/logos/teams/teamempire.png
/images/logos/teams/ehome.png/images/logos/teams/ehome.png
/images/logos/teams/fnatic.png/images/logos/teams/cloud9.png
/images/logos/teams/teamissecret.png/images/logos/teams/teamissecret.png
/images/logos/teams/natusvincere.png/images/logos/teams/fnatic.png
我真的不知道你想从API获得哪些信息,但是你有一个工作代码基础,你可以进一步使用它来从正确的KEY获得所需的数据。
答案 1 :(得分:1)
logo_url
的{{1}}或来自team
的{{1}}吗?我将在我的实施中展示。所以这里有一些更正的代码
image_url
*编辑通过问题作者显示想要的实现...
league