[英]Decode json string returned from Flickr API using PHP, curl
我試圖在我的PHP代碼中解碼從flickr返回的json字符串。 我使用CURL但它仍然返回一個字符串,即使我在json sring變量周圍包裝json_decode()。 有任何想法嗎?
$api_key = '####';
$photoset_id = '###';
$query = 'http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key='.$api_key.'&photoset_id='.$photoset_id.'&extras=url_o,url_t&format=json&jsoncallback=1';
$ch = curl_init(); // open curl session
// set curl options
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch); // execute curl session
curl_close($ch); // close curl session
var_dump(json_decode($data));
您的請求網址以:
&format=json&jsoncallback=1';
參數的正確名稱是nojsoncallback ,因此您應該使用的正確URL如下所示:
&format=json&nojsoncallback=1';
改變它,它應該工作。
問候。
那是因為返回的數據不是有效的JSON。 它的有效JavaScript。 返回的數據包含在名為jsonFlickrApi
的默認回調函數中。
你需要擺脫JSON回調,它將JSON包裝在一個回調函數中,然后該函數應該在客戶端執行。 您需要對返回的JSON執行一些字符串操作以刪除默認的回調jsonFlickrApi
,然后將其傳遞給json_decode
$api_key = '####';
$photoset_id = '###';
$query = 'http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key='.$api_key.'&photoset_id='.$photoset_id.'&extras=url_o,url_t&format=json';
$ch = curl_init(); // open curl session
// set curl options
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch); // execute curl session
curl_close($ch); // close curl session
$data = str_replace( 'jsonFlickrApi(', '', $data );
$data = substr( $data, 0, strlen( $data ) - 1 ); //strip out last paren
$object = json_decode( $data ); // stdClass object
var_dump( $object );
甚至更好,而不是在您的網址中使用format = json,使用format = php_serial並獲取序列化字符串然后您不必擔心從flickr有效格式化並獲得一個數組作為回報
$api_key = '####'; $photoset_id = '###'; $query = 'http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key='.$api_key.'&photoset_id='.$photoset_id.'&extras=url_o,url_t&format=php_serial'; $ch = curl_init(); // open curl session // set curl options curl_setopt($ch, CURLOPT_URL, $query); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); // execute curl session curl_close($ch); // close curl session $output = unserialize ($data);
nojsoncallback的詳細信息位於此頁面底部https://www.flickr.com/services/api/response.json.html
堆棧溢出再次節省了一天。 我搜索了flickr文檔,發現沒有提到這個“nojsoncallback”參數。
誰默認制作這樣的功能,然后不告訴任何人如何禁用它?
更糟糕的是,為什么要編寫你必須ENable才能使功能失效?!
可笑......但是感謝抬頭,這解決了我的問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.