这是我讨厌的问题,因为我知道答案一定非常简单,但我似乎无法弄明白。
我正在尝试解析来自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
的内容时,我得到一个充满�
字符的奇怪回复。
任何正确方向的提示都将受到赞赏。
答案 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