2013-09-16 64 views
3

工作,我有這樣的代碼Json_decode不是在Flickr的API

$feed_Flickr = 'http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json'; 
    $Flickr = file_get_contents($feed_Flickr); 
    $Flickr = str_replace('jsonFlickrFeed(','',$Flickr); 
    $Flickr = str_replace('})','}',$Flickr); 
    $flickrvalue = json_decode($Flickr); 
    print_r($flickrvalue); 

print_r的回報沒有什麼是錯的代碼?

回答

6

的數據是不是有效的JSON,這就是爲什麼json_decode()不工作。您可以嘗試使用網站(如jsonlint.com)進行驗證。

json_decode()文檔:是或返回

NULL,如果JSON不能被解碼,如果編碼數據大於遞歸限制更深。

這就解釋了爲什麼你沒有得到任何產出。

UPDATE:

原來Flickr的逃逸單引號('),顯然這是不允許的,使JSON無效。您可以使用str_replace()來解決這個問題:

$flickrResponse = str_replace("\\'", "'", $Flickr); 

此外,作爲Flickr API documentation說,而不是使用正常的JSON,您可以通過nojsoncallback參數與1價值附加到URL獲取原始的JSON,像這樣:

http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&nojsoncallback=1

所以,按照這種變化,我們的代碼應該工作:

$feed_Flickr = 'http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&nojsoncallback=1'; 
$Flickr = file_get_contents($feed_Flickr); 
$flickrResponse = str_replace("\\'", "'", $Flickr); 
$results = json_decode($flickrResponse, true); 
print_r($results); 

Demo!

+0

這意味着Flickr的API有數據不是有效的JSON? –

+0

@magedali:是的,這似乎是一個錯誤。見http://www.flickr.com/groups/api/discuss/72157622950514923/ –

+0

本教程http://snipplr.com/view/42794/怎麼樣? –

0

拼寫錯誤!

Flickrn!

$Flickr = str_replace('})','}',$Flickrn); 
+0

沒有這一點,我編輯它,但無法正常工作 –