TIA求助。
我有一个调用API的脚本。它返回一个JSON对象,当我在WAMP中运行脚本时出现错误,但是当我在OSX上运行它时没有问题。
这是有问题的一行:
$obj = json_decode($json);
if ($obj->{'Status'} == 'OK'){...}
它在OSX上运行完美,但是当我在WAMP上运行时,我收到以下错误:
注意:尝试获取非对象的属性。
我检查了两个安装都启用了JSON模块。
不确定还要检查什么,或者我是否使用了错误的语法。
由于
答案 0 :(得分:3)
您可以使用->
语法,但如果密钥的字符超出了PHP中有效标识符的范围,您也可以将调用更改为json_decode
:
json_decode($json, true);
这将返回一个关联数组,您可以使用[]
语法访问元素,如此;
$obj['Status'];
答案 1 :(得分:1)
简单地说,$object->property
将是正确的方法。
答案 2 :(得分:1)
如果php无法使用json_decode
对json进行解码,则$obj
的值为null
,因此它不会是对象。这可能是您收到此错误的原因。
最好确保正确解析json。像这样:
$obj = json_decode($json);
if (isset($obj) && $obj->status === 'OK') {...}
此外,读取对象属性的最佳方法是在箭头后面直接使用属性的名称,如我的示例所示。
答案 3 :(得分:1)
通常,在php中,您可以使用" $ obj-> status"来访问对象的属性。或者" foreach($ obj as $ key => $ value)"获取属性值。
答案 4 :(得分:0)
谢谢大家。上面的所有答案都是正确的,不同的方法来修复我原来的语法问题
但是,我发现我的WAMP和OSX安装之间的区别在于,在WAMP中,需要以下内容:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
这就是为什么我的$ obj varible首先是null。