PHP接口运行报Attempt to read property "url" on null如何解决
报错原因
这个警告由两处写法和返回结构不匹配导致:
- 解析图片接口JSON时,你给
json_decode()传了第二个参数true,这个配置会把JSON解析为关联数组,不是对象,不能用->的对象属性语法读值。 - 从你打印的
$imgCharacters结果看,这个接口返回的是一维关联结构,根本没有下标为0的元素,所以$imgCharacters[0]取到的是null,读null的url属性自然会抛警告。
第一个接口的语句能正常运行,是因为它返回的是索引数组结构的JSON,且你解析时没传第二个true参数,默认解析成对象数组,$characters[0]->fact的写法和结构匹配,所以没报错。
修复方法
按照你当前的解析逻辑,直接把错误的取值语句改成数组键名访问即可,不需要加[0]下标,修复后的代码如下:
<?php $url = 'https://players-facts-api.herokuapp.com/api/v1/resources/players?number=1'; $imgUrl='https://random.cricket/players.json'; $data = file_get_contents($url); $dataImg= file_get_contents($imgUrl); $characters = json_decode($data); $imgCharacters = json_decode($dataImg, true); echo $characters[0]->fact; // 修正图片地址取值逻辑 echo $imgCharacters['url']; print_r($imgCharacters); ?>
如果你习惯用对象语法取值,可以把图片JSON的解析语句改成$imgCharacters = json_decode($dataImg);(去掉第二个true参数),对应取值写为echo $imgCharacters->url;即可,同样不需要加[0]下标。
内容的提问来源于stack exchange,提问作者Arctic Fox
相关产品推荐
相关产品推荐

