【问题标题】:json_decode and StackExchange apijson_decode 和 StackExchange api
【发布时间】:2014-10-27 18:54:18
【问题描述】:

我正在尝试将 V2.2 of StackExchange apiPHP 一起使用。我将 Symfony 项目与 Kriswallsmith 的 buzz 库一起使用。

当我尝试打印 HTTP 请求的响应内容及其编码时,问题就来了。我已经在 StackOverflow 中阅读了很多与此问题相关的问题,但问题仍然存在。

这是我显示问题的部分代码:

echo "The url: ";
var_dump($url);
var_dump($response);
$content = $response->getContent();
echo "Json decode's content: ";
var_dump(json_decode($content, true));
echo "The error is";
switch(json_last_error()) {
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
        break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
        break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
        break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Invalid or malformed JSON';
        break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
}

die();

这将返回以下内容:

如果你粘贴

https://api.stackexchange.com/2.2/answers?site=stackoverflow&sort=activity&

在浏览器中,它返回一个有效的 JSON。

【问题讨论】:

    标签: php symfony stackexchange-api


    【解决方案1】:

    我突然想到,由于某种原因,内容没有解压缩:

    $ curl https://api.stackexchange.com/2.2/answers
    �VJ-*�/��LQ�210ЁrsS���S����3KR2��R
                                      K3�RS�`J�sA�I�)��E@NIj�R-g��PP
    
    $ curl https://api.stackexchange.com/2.2/answers | gzip -d
    {"error_id":400,"error_message":"site is required","error_name":"bad_parameter"}
    

    您应该可以使用 PHP 的 gzuncompress 函数或稍微挖掘一下 Buzz。

    【讨论】:

    • 这是原因,但 gzuncompress 功能仍在下降。这是我的问题的正确方法/答案。谢谢 ;) stackoverflow.com/a/10105319/2359967
    • @benatespina,好吧,实际上 HTTP 客户端应该自己解决这些技术问题:它可以读取标头,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2016-07-20
    相关资源
    最近更新 更多