cUrl возвращает строку JSON, json_decode не декодирует ее в объект или массив

Я использую API GitHub для извлечения наиболее популярных «помеченных» элементов в PHP, и это нормально выводит строку json. Единственная проблема в том, что мой json_decode все еще просто выводит строку JSON, а не объект. Ниже приведена функция, которую я выполняю.

private function fillTable(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL       => 'https://api.github.com/search/repositories?q=+language:php&sort=stars&order=desc',
CURLOPT_USERAGENT => 'trickell'
));
$res = curl_exec($curl);
var_dump(json_decode($res));
}

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

2

Решение

Потому что у вас есть нет JSON для декодирования, и это потому, что вы не говорите cURL возвращать вам значение, поэтому вы пытаетесь декодировать пустую строку.

$res = curl_exec($curl);

Тот $res будет только ИСТИНА / ЛОЖЬ если вы не попросите RETURNTRANSFERкак объяснено здесь

curl_exec

Возвращает ИСТИНА в случае успеха или ЛОЖЬ в случае неудачи. Однако, если установлена ​​опция CURLOPT_RETURNTRANSFER, она вернет результат в случае успеха, FALSE в случае ошибки.

Таким образом, вы должны добавить еще одну опцию к вашему вызову cURL.

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

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

CURLOPT_RETURNTRANSFER

TRUE для возврата передачи в виде строки возвращаемого значения curl_exec () вместо того, чтобы выводить его напрямую.

(акцент мой)

3

Другие решения

<?php
$post = ['batch_id'=> "2"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://example.com/student_list.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$response = curl_exec($ch);
$result = json_decode($response);
$new=   $result->status;
if( $new =="1")
{
echo "<script>alert('Student list')</script>";
}
else
{
echo "<script>alert('Not Removed')</script>";
}

?>
0

Вам не хватает этого:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));
0
По вопросам рекламы [email protected]