2012-04-24 85 views
3

我有一個JSON對象IM從一個URL解碼,像這樣:當來自URL的數據很小時,JSON對象爲NULL?

$var = json_decode(file_get_contents($url), true); 

我得到的數據是從被返回包含字符數據的JSON對象的新battle.net API。

  • 這裏是一個實際的鏈接,其中字符被找到並且有數據要被生成:Character Found
  • 現在這裏是一個不存在的字符的鏈接,並生成和錯誤:Character Not Found

錯誤返回爲包含「狀態」和「原因」屬性的JSON對象。 「狀態」屬性的值將始終爲「nok」。

我的問題是當字符沒有找到JSON對象$ var是NULL,如果它被找到JSON對象$ var包含正確的數據。我需要能夠檢查狀態是否爲「諾」這樣我就可以輸出apropriate錯誤信息

我:

  • 經過的聯繫,以確保它們正確生成。
  • json_decode(file_get_contents($url), true)更改爲:json_decode(file_get_contents($url), false)並嘗試訪問$ var作爲對象。
  • 使用捲曲,而不是file_get_contents($url)

我貼在battle.net API論壇試過,但我想我會嘗試在這裏。

回答

3

這是因爲頁面Character Not Found頁面返回一個404 Not Found HTTP響應代碼,這很有道理,但被認爲是錯誤。

當遇到HTTP流封裝器上的錯誤(404,500等)時,文件函數(如file_get_contents)將默認返回false

爲了忽略錯誤反正返回的內容,使json_decode可以解析它,你需要使用情境:

$context = stream_context_create(array(
    'http' => array('ignore_errors' => true), 
)); 

$var = json_decode(file_get_contents($url, false, $context), true); 
+0

真棒謝謝你,我讀了關於使用串流上下文,但我沒有找不到任何相關的東西。 – JaredTS486 2012-04-24 19:57:26

相關問題