簡體   English   中英

如何從解碼的JSON PHP中正確檢索文本

[英]How to properly retrieve text from decoded json PHP

我試着去獲得從JSON文件,我可以通過一個鏈接檢索圖像鏈接這樣我有被提取正確的數據的問題。 我想獲取結果數組內部的poster_path字段,但是我的嘗試失敗了。 目前這是我的代碼-

$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數據,但無法訪問結果數組,則此方法有效。

編輯-結果數組實際上並沒有從鏈接中獲取其內容,JSON像這樣-{“ page”:1,“ total_results”:0,“ total_pages”:1,“ results”:[ ]}

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

$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;
$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"
}

如果要獲取數組而不是對象, json_decodetrue設置為json_decode第二個參數:

$obj = json_decode($json, true);

然后,您可以通過以下方式獲取數據:

echo $obj['results'][0]['poster_path'];
$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;

我希望這是您要尋找的! 如果沒有,請更新您期望的輸出

顯然,這不是JSON的問題,但是prag_replace用%而不是%20替換了網址中的空格,這意味着它找不到結果,所以失敗了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM