7

我正在尝试编写一个脚本,该脚本使用 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}

我访问“流”属性,我尝试了以下代码:

<?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() 错误,还是我从 twitch 发送的 JSON 对象有问题?

编辑:

我现在有了 JSON 对象:

{"access_token": "qwerty1235","refresh_token": "asdfghjkl=","scope": ["user_read"]}

如果我尝试使用它来解码它,json_decode()我会收到以下错误:Object of class stdClass could not be converted to string. 有什么建议吗?

提前感谢您的帮助

4

2 回答 2

7

您正在将 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

查看文档,当为 TRUE 时,返回的对象将被转换为关联数组。

于 2014-08-08T02:08:58.487 回答
4

您已将json_decode()的第二个参数 ($assoc) 设置为 true,这意味着它将返回关联数组而不是对象。然后,您尝试引用对象样式。如果将第二个参数设置为 true,则需要使用关联数组样式来访问流内容。这将是:

$json_decoded['stream']

如果将 $assoc 参数设置为 false(或不指定参数),则可以将其作为对象引用:

$json_decoded->stream

如果您对 $json_decoded 变量执行var_dump,您将看到它的样子。这是查看您正在使用的内容的好方法。

于 2014-08-08T02:06:25.627 回答