2017-09-02 57 views
-1

我有一個通過API填充數據的網站。我閱讀它的文檔來獲取它的數據,並建議使用curl。我不熟悉,捲曲,所以我只身去學習它,並用下面的代碼上來:使用CURL GET JSON數據

$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

調試代碼。也許這不是有效的JSON。 $ datasearch包含什麼? – ryantxr

+0

@ryantxr我認爲它必須包含JSON數據的數組,但頁面是空白的! –

+0

永不假設。轉儲數據並查看它包含的內容。這是我對你的代碼做了什麼,看看它包含了什麼。然後我修改了你的代碼以獲得你想要的數據。 – ryantxr

回答

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); 
?> 
1

你的代碼是正確的,只是一個錯誤,你怎麼試圖拿json的對象。

變化像這樣,將是工作

echo $datasearch[0]->id; 
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); 
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);