2017-10-09 28 views
0

我試圖從JSON文件中獲取圖像鏈接,我可以通過鏈接檢索like this我遇到的問題是提取正確的數據。我想獲得結果數組內的字段poster_path,但是我的嘗試失敗了。目前,這是我的代碼 -如何從解碼的json正確檢索文本PHP

$json = 'https://api.themoviedb.org/3/search/movie?api_key=15d2ea6d0dc1d476efbca3eba2b9bbfb&query='.$title; 
$json = preg_replace('/\s+/', '%', $json); 
$json = file_get_contents($json); 
$obj = json_decode($json); 
echo $obj->results[0]['poster_path']; 
//Have also tried 
//echo $obj->results[0]->poster_path; 

它的工作原理,如果我只能儘量達到,例如TOTAL_PAGES但是數據Im無法訪問的結果陣列。編輯 - 結果數組實際上沒有從鏈接中獲取其內容,JSON保持如下形式 - {「page」:1,「total_results」:0,「total_pages」:1,「結果「:[]}

+0

似乎'$ obj-> results [0]'也是一個JSON。 –

+0

@MilanChheda認爲你可以寫一個答案? – Hamish

+0

我不完全確定特定的API是如何工作的,但是您是否只發布了API密鑰?你可能想要隱藏它,並在問題中顯示請求響應:) – Ezenhis

回答

1

您需要使用對象語法來訪問屬性:

$obj->results[0]->poster_path 

將返回你想要的數據。

您的網址編碼也存在問題。你的方法使用preg_replace是錯誤的(應該是%20不僅僅是%),但它也是天真的,因爲它沒有考慮輸入中的其他可能的編碼問題。 PHP有一個內置函數urlencodehttp://php.net/manual/en/function.urlencode.php),它可以爲你處理這種事情。

最後,你有一個奇怪的變量命名 - 對你的url字符串使用「$ json」沒有任何意義,並且你已經使用該名稱進一步下來了遠程服務器的響應,這使得更有意義。應根據用途命名具有不同用途的變量,也不相互衝突/覆蓋。這將使您的代碼更易於維護。

這裏有一個更好的版本代碼的:

$url = 'https://api.themoviedb.org/3/search/movie?api_key=15d2ea6d0dc1d476efbca3eba2b9bbfb&query='.urlencode($title); 
$json = file_get_contents($url); 
$obj = json_decode($json); 
echo $obj->results[0]->poster_path; 
+0

我已經嘗試這樣做,也沒有工作 – Hamish

+0

你得到什麼錯誤?我試過了,很好。看到這個可運行的例子:http://phpfiddle.org/main/code/i5bj-xm9u。我認爲在你的情況下唯一可能的區別可能是$ title是無效的,而你沒有從API獲得你期望的響應。如果標題包含空格,例如問題中提供的示例鏈接,請確保在將URL附加到基本URL之前對其進行網址編碼。 – ADyson

+0

呀在線例子但是工作時,我本地運行它給我的,因爲它留下的結果陣列空 – Hamish

0
$obj->results[0]->poster_path; 

應該很好。但是一些對象在該屬性中有一個null。例如:

{ 
    "vote_count": 0, 
    "id": 479701, 
    "video": false, 
    "vote_average": 0, 
    "title": "Test", 
    "popularity": 4.92, 
    "poster_path": null, 
    "original_language": "en", 
    "original_title": "Test", 
    "genre_ids": [ 
    28 
    ], 
    "backdrop_path": null, 
    "adult": false, 
    "overview": "Testing the APIs", 
    "release_date": "2017-10-05" 
} 

如果你想獲得陣列,而不是對象,建議立即進行刪除設置truejson_decode第二個參數:

$obj = json_decode($json, true); 

然後你就可以得到你的數據:

echo $obj['results'][0]['poster_path']; 
+0

我仍然得到這個錯誤 - 注意:未定義的偏移量:0在/Applications/XAMPP/xamppfiles/htdocs/website/search.php第21行,第21行是迴音線 – Hamish

+0

你確定'file_get_contents'返回正確的答案?嘗試在執行'json_decode'之前調用'var_dump($ json)''。並看看輸出。 – poletaew

+0

啊,你說得對所有得到的是這個 - 字符串(57) 「{」 頁面 「:1,」 TOTAL_RESULTS個 「0」,TOTAL_PAGES 「:1,」 結果 「:[]}」 – Hamish

0
$json = 'https://api.themoviedb.org/3/search/movie?api_key=15d2ea6d0dc1d476efbca3eba2b9bbfb&query=Raiders%25of%25the%25lost%25ark'; 
     $json = preg_replace('/\s+/', '%', $json); 
     $json = file_get_contents($json); 
     $obj = json_decode($json); 
     $result = array(); 
     foreach($obj->results as $key=>$value) 
     { 
      $result[$value->id] = $value->poster_path; 
     } 
     echo $result; 

我希望這是你要搜索的內容! 如果沒有請更新你期望的輸出

0

顯然這不是JSON的問題,但prag_replace用%替換%20中的空白,這意味着它無法找到結果它失敗了。