解析JSON

时间:2015-10-29 01:54:51

标签: php json stackexchange-api

这是我讨厌的问题,因为我知道答案一定非常简单,但我似乎无法弄明白。

我正在尝试解析来自Stack Exchange API的JSON响应,但是我得到一个空字符串,即使我检查了URL以及JSON格式,一切看起来都是有效的。

我使用的代码很简单:

$surl = file_get_contents("https://api.stackexchange.com/2.2/search?order=desc&sort=relevance&intitle=books&site=stackoverflow");

$json1 = json_decode($surl,true);

print_r($json1);

当我在echo之前尝试$surl json_decode的内容时,我得到一个充满字符的奇怪回复。

任何正确方向的提示都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

API调用返回的字符串according to the Stack Exchange API documentation已被压缩。

  

此外,所有API响应都已压缩。始终设置Content-Encoding标头,但某些代理会将其删除。可以在此处找到解码API响应的正确方法。

您需要先使用gzdecode()解压缩字符串,然后才能正常json_decode()

$surl = file_get_contents("https://api.stackexchange.com/2.2/search?order=desc&sort=relevance&intitle=books&site=stackoverflow");

// Decode the compressed string
$surl = gzdecode($surl);

// Then you'll be able to json_decode() it...
$json1 = json_decode($surl, true);

print_r($json1);
// Prints:

Array
(
    [items] => Array
        (
            [0] => Array
                (
                    [tags] => Array
                        (
                            [0] => research
                        )

                    [owner] => Array
                        (
                            [reputation] => 9995
                            [user_id] => 1944
                            [user_type] => registered
                            [accept_rate] => 93
                            [profile_image] => https://www.gravatar.com/avatar/93fc84c261cdce2e2f1d64c8e531ecb7?s=128&d=identicon&r=PG
                            [display_name] => Charles Roper