cUrl返回JSON字符串,json_decode不会将其解码为对象或数组

时间:2016-02-27 02:43:49

标签: php json github-api

我正在使用github的api来吸引最受欢迎的"加星标" 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字符串解码为对象。如果你运行它,你应该能够确切地看到了什么。

3 个答案:

答案 0 :(得分:3)

因为您要解码 json,这是因为您没有告诉cURL将值返回给您,因此您尝试解码空字符串。

$res = curl_exec($curl);

$res只会 TRUE / FALSE ,除非您要求RETURNTRANSFER,如此处所述

curl_exec

  

成功时返回TRUE,失败时返回FALSE。但是,如果设置了CURLOPT_RETURNTRANSFER选项,它将在成功时返回结果,在失败时返回FALSE。

所以你必须为你的cURL电话添加另一个选项。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

你可能会问,为什么你看到JSON字符串如果没有被返回,这就回答了这个问题

<强> CURLOPT_RETURNTRANSFER

  

TRUE,将传输作为curl_exec()返回值的字符串返回,而不是直接输出

(强调我的)

答案 1 :(得分:0)

<?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>";
}

?>

答案 2 :(得分:0)

您缺少此内容:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Accept: application/json'
        ));