为什么我不能json_decode我的API响应?

时间:2018-12-21 03:22:07

标签: php laravel api guzzle guzzle6

我尝试从此来源获取数据,这是有关我所在国家的学校详细信息。但是当我收到响应时,我无法解码我的响应,并说Null。 Idk为什么,但是当我尝试将响应结果复制并粘贴到硬编码时,就可以对其进行解码。为什么?

我已经尝试了所有可能的方法来解决此问题,但没有任何效果。

这是我的代码:

$client = new \GuzzleHttp\Client();

$res = $client->request('GET', 'http://jendela.data.kemdikbud.go.id/api/index.php/Csekolah/detailSekolahGET?mst_kode_wilayah=026700');

$response = $res->getBody()->getContents();

$result = json_decode($response); // this return NULL

//But when i going to return the $response, it show the response.

return $response;

我希望访问数据,或者只是解码我的代码,这对我有很大帮助。

仅供参考,我正在使用Guzzle 6和Laravel 5.7进行此工作。

我希望有人也可以尝试访问它并为我提供帮助。

或者也许如果您要测试它,可以使用Curl Ways:

$param = 'index.php/Csekolah/detailSekolahGET?mst_kode_wilayah=026700';
$url='http://jendela.data.kemdikbud.go.id/api/'.$param;

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec ($ch);
return $response;

3 个答案:

答案 0 :(得分:2)

json_decode文档说:

  如果无法解码json或编码的数据,则返回

NULL   比递归限制还深。

您可以使用json_last_errorjson_last_error_msg函数来确定问题。

我无法获得完整的响应,它已超时并终止了。

答案 1 :(得分:0)

根据文档:

  

如果无法解码json或编码数据的深度大于递归限制,则返回NULL

来源:json_decode

一些调试提示:

  1. 确保所有字符都位于utf8
  2. 指定深度值(高于默认值)
  3. 充分利用json_last_error,请参见:json_last_error

如果调试提示 1 恰好是造成此问题的原因,请查看是否可以将返回值限制为不包含有问题的字符。

答案 2 :(得分:0)

删除行return $response;

并尝试以下代码:

$enc = mb_detect_encoding($response);

if($enc == 'UTF-8') {
  $response = preg_replace('/[^(\x20-\x7F)]*/','', $response);    
} 
echo "<pre>";
print_r(json_decode($response,true));