Пустой результат при разборе JSON

Я ненавижу задавать такие вопросы, потому что знаю, что ответ должен быть очень простым, но я не могу его понять.

Я пытаюсь проанализировать ответ JSON от Stack Exchange API, но в результате получаю пустую строку, хотя я проверил 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, я получаю странный ответ, состоящий из символов.

Любой совет в правильном направлении будет оценен.


person JordanBelf    schedule 29.10.2015    source источник


Ответы (1)


Строка, возвращенная вызовом API, согласно документации API Stack Exchange была сжата.

Кроме того, все ответы 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
person Michael Berkowski    schedule 29.10.2015
comment
Большое спасибо! совсем пропустил это. Большое спасибо, Майкл - person JordanBelf; 29.10.2015