使用CURL获取JSON数据

时间:2017-09-02 17:09:47

标签: php json curl

我有一个网站通过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数据。请告诉我我做错了什么。感谢

4 个答案:

答案 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);