我正在尝试使用cURL编写一个从远程位置(在本例中为twitch.tv)获取JSON文件的脚本(不要认为该部分太相关,不过我最好还是提一下)。例如,假设它返回的JSON对象在存储在变量中之后看起来像这样:
$json_object = {"_links":{"self":"https://api.twitch.tv/kraken/streams/gmansoliver","channel":"https://api.twitch.tv/kraken/channels/gmansoliver"},"stream":null}
我访问“stream”属性,我尝试了以下代码:
<?php
$json_object = {"_links":{"self":"https://api.twitch.tv/kraken/streams/gmansoliver","channel":"https://api.twitch.tv/kraken/channels/gmansoliver"},"stream":null}
$json_decoded = json_decode($json_object, true);
echo $json_decoded->stream;
?>
当我尝试这个时,我收到错误“注意:尝试在第48行的D:\ Servers \ IIS \ Sites \ mysite \ getstream.php中获取非对象的属性”。
我是否使用了json_decode()错误,或者我是否从抽搐中发送了JSON对象有什么问题?
编辑:
我现在有了JSON对象:
{"access_token": "qwerty1235","refresh_token": "asdfghjkl=","scope": ["user_read"]}
如果我尝试使用json_decode()
对其进行解码,则会收到以下错误:Object of class stdClass could not be converted to string
。有什么建议吗?
提前感谢您提供任何帮助
答案 0 :(得分:6)
您将JSON解码为数组。 json_decode($json_object, true);
将返回一个数组
array (size=2)
'_links' =>
array (size=2)
'self' => string 'https://api.twitch.tv/kraken/streams/gmansoliver' (length=48)
'channel' => string 'https://api.twitch.tv/kraken/channels/gmansoliver' (length=49)
'stream' => null
如果删除第二个参数并将其作为json_decode($json_object)
object(stdClass)[1]
public '_links' =>
object(stdClass)[2]
public 'self' => string 'https://api.twitch.tv/kraken/streams/gmansoliver' (length=48)
public 'channel' => string 'https://api.twitch.tv/kraken/channels/gmansoliver' (length=49)
public 'stream' => null
See the documentation,当为TRUE时,返回的对象将被转换为关联数组。
答案 1 :(得分:2)
您已将json_decode()的第二个参数($ assoc)设置为true,这意味着它将返回关联数组而不是对象。然后,您尝试引用对象样式。如果要将第二个参数设置为true,则需要使用关联数组样式来访问流内容。它将是:
$json_decoded['stream']
如果将$ assoc参数设置为false(或者不指定参数),则可以将其作为对象引用:
$json_decoded->stream
如果对$ json_decoded变量执行var_dump,您将看到它的外观。这是查看您正在使用的内容的好方法。