使用PHP解析从Flickr API返回的json字符串,curl
我试图解码从我的PHP代码中的flickr返回的json字符串。即时使用CURL,但它仍然返回一个字符串,即使当我绕json sring变量包装json_decode()。有任何想法吗?使用PHP解析从Flickr API返回的json字符串,curl
$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));
这是因为返回的数据不是有效的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);
查看下面的答案更简单的选择(注意别人,因为我几乎错过了它自己)。 – 2012-04-06 22:26:42
您要求的网址结尾:
&format=json&jsoncallback=1';
参数的正确名称是nojsoncallback,所以正确的网址,你应该使用结束这样的:
&format=json&nojsoncallback=1';
改变它,它应该工作。
问候。
谢谢澄清对我来说雅各布和xmarcos!使完美的感觉... – Globalz 2010-05-09 13:14:21
* @ xmarcos * - 好一个! Wish @ Globalz *已经选择了这个作为正确答案,因为我几乎错过了它。 – MikeSchinkel 2010-10-13 18:41:52
谢谢xmarcos,它完全解决了我遇到的问题。 – 2011-10-25 22:31:28
堆栈溢出再次保存一天。我搜索了flickr文档,发现没有提到这个“nojsoncallback”参数。
谁默认这种功能,然后不告诉任何人如何禁用它?
更糟糕的是,为什么会写入您必须使其能够禁用才能禁用该功能?
可笑......但谢谢你的抬头,这解决了我的问题!
更妙的是,而不是使用您的网址,使用格式= php_serial格式= JSON,并得到一个序列化的字符串,那么你不会担心来自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);
什么是响应看起来像? – sberry 2010-05-02 04:27:22