【问题标题】:Decoding JSON feed via PHP from Twitter not working?通过 PHP 从 Twitter 解码 JSON 提要不起作用?
【发布时间】:2010-01-26 21:11:46
【问题描述】:

所以我正在通过 PHP 以 JSON 格式提取用户的推文流。我想将它解码为关联数组或至少一些更有用的方式而不是字符串,以便我可以通过它进行操作。

我一直在疯狂地阅读关于 json_decode 的内容,但对我来说,似乎在我使用它之前和之后,文件的内容仍然被检测为一个长字符串。谁能帮我弄清楚我做错了什么?

$url = "http://twitter.com/status/user_timeline/" . $username . ".json?count=" . $count . "&callback=?";    

// $url becomes "http://twitter.com/status/user_timeline/steph_Rose.json?count=5&callback=?";   
        $contents = file_get_contents($url);
        $results = json_decode($contents, true);

        echo "<pre>";
        print_r($results);
        echo "</pre>";

        echo gettype($results); // this returns string

【问题讨论】:

  • 你检查过$contents 是什么样的吗? IE。 $contents的内容? :)
  • json_last_error() 返回JSON_ERROR_SYNTAX
  • 是的,这是一个很长很长的字符串。不过,我刚刚发现了问题!
  • Alix,我将不得不调查那个错误。我不知道这是什么意思。
  • 查看这里json_last_error() :php.net/manual/en/function.json-last-error.php 如果是语法错误,则 Twitter 未提供有效的 JSON。

标签: php json twitter decode


【解决方案1】:

在 URL 中使用callback,您会得到一个用括号括起来的字符串 ( )(字符串的摘录):

([{"in_reply_to_user_id":  /* ...more data here...*/ }]);

这不是有效的 JSON。

没有callback,结果只包裹在[ ] 中有效:

 [{"in_reply_to_user_id":  /* ...more data here...*/ }]

【讨论】:

  • 所以我猜想 javascript 需要回调,因为它是客户端并且需要触发器,但是在 PHP 中 file_get_contents() 将执行,直到数据被读取和存储后才会执行下一步.只是想弄清楚何时使用回调,何时不使用。我一取下它,它就起作用了。谢谢 :) 检查正确并投了赞成票。
【解决方案2】:

放弃 &callback=?在网址中。

【讨论】:

  • 是的,这正是我最终所做的。我理解回调,但为什么会搞砸呢?
  • 因为返回的字符串有括号。那只是简单的,无效的json。在 json 中它们没有必要/目的,因此它们不包含在定义中。请记住,json 与 javascript 并不完全相同。
【解决方案3】:

我习惯于使用 jQuery 库解析 JSON,所以我有 &callback=?在 URL 的末尾。

好像我把它去掉了,json_decode() 将数据转换为数组没有问题。

如果有人知道这是为什么,我很想知道。

长话短说,它有效!

【讨论】:

    【解决方案4】:
       $url = "http://twitter.com/status/user_timeline/" . $username . ".json?count=" . $count;
    

    移除回调,让你的 json 是 json 而不是 jsonp,jsonp 在解码时中断

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2017-05-12
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多