我正在使用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字符串解码为对象。如果你运行它,你应该能够确切地看到了什么。
答案 0 :(得分:3)
因为您要解码否 json,这是因为您没有告诉cURL将值返回给您,因此您尝试解码空字符串。
$res = curl_exec($curl);
$res
只会 TRUE / FALSE ,除非您要求RETURNTRANSFER
,如此处所述
成功时返回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'
));