почему я не могу json_decode мой ответ от API? - PullRequest
0 голосов
/ 21 декабря 2018

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

я перепробовал все возможные способы решения этой проблемы, ничего не получилось.

это мой код:

$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 голосов
/ 21 декабря 2018

Согласно документации:

Возвращается NULL, если JSON не может быть декодирован или если закодированные данные глубже, чем предел рекурсии

Источник: json_decode

Некоторые советы по отладке:

  1. Убедитесь, что все символы находятся в пределах utf8
  2. Укажите значение глубины (больше значения по умолчанию)
  3. Используйте json_last_error см.: json_last_error

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

0 голосов
/ 21 декабря 2018

Удалите строку 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));
0 голосов
/ 21 декабря 2018

Документ json_decode гласит:

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

Вы можете использовать json_last_error или json_last_error_msg , чтобы определить проблему.

Я не могу получить полный ответ, его время истекло и прекращено.

...