簡體   English   中英

解碼使用PHP,curl從Flickr API返回的json字符串

[英]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.

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