我有一个网站通过API填充它的数据。我阅读其文档以获取其数据,并建议使用curl。我不熟悉卷曲,所以我自己去学习并提出以下代码:
$url = 'https://api.flightplandatabase.com/search/plans?fromICAO=EHAM&toName=Kennedy&limit=1';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
$datasearch = json_decode($data);
echo $datasearch['id'];
curl_close($curl);
但是当我试图显示计划的ID时,我得到一个空白页面。如果我删除curl_setopt然后它给我整个JSON数据。请告诉我我做错了什么。感谢
答案 0 :(得分:1)
您的代码是正确的,只是您尝试获取json对象的错误。
像这样改变并且会起作用
echo $datasearch[0]->id;
答案 1 :(得分:1)
我添加了curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json'));
行,以确保我们接受JSON格式的数据。
$datasearch
是一个包含一个元素的数组。那一个元素是您想要的所有属性的数组。因此,要访问这些属性,我们需要先访问元素,然后再访问属性。您可以通过$datasearch[0]["id"];
执行此操作。为避免不断输入$datasearch[0]
,您只需将$datasearch
值重置为第一个元素($datasearch = $datasearch[0];
)即可。之后,您可以像$datasearch["id"]
一样使用它。
<?php
$url = 'https://api.flightplandatabase.com/search/plans?fromICAO=EHAM&toName=Kennedy&limit=1';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
$datasearch = json_decode($data, true);
if(!empty($datasearch)) {
$datasearch = $datasearch[0];
echo $datasearch["id"];
} else {
echo "Data not fetched.";
}
curl_close($curl);
?>
答案 2 :(得分:0)
您阅读数据的方式与实际数据不符。
解码后你有一个对象数组。该数组包含一个
数组元素。因此,您必须使用$datasearch[0]
来获取第一个元素
然后->id
到对象的id元素。
$url = 'https://api.flightplandatabase.com/search/plans?fromICAO=EHAM&toName=Kennedy&limit=1';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
$datasearch = json_decode($data);
if ( $datasearch ) {
echo $datasearch[0]->id;
}
else {
echo "bad data";
}
curl_close($curl);
答案 3 :(得分:0)
您应该进行一些错误检查,因为如果服务器出现问题,您可能会收到500错误的响应:
<?php
$url = 'https://api.flightplandatabase.com/search/plans?fromICAO=EHAM&toName=Kennedy&limit=1';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if($response = curl_exec( $curl ))
{
if( curl_getinfo( $curl, CURLINFO_HTTP_CODE ) == '200' )
{
$json = json_decode($response, TRUE, JSON_PRETTY_PRINT);
echo $json[0]['id'];
}
else
{
$curl_info = curl_getinfo( $curl );
}
}
else
{
echo 'Error';
}
curl_close($curl);