我试图在我的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));
答案 0 :(得分:47)
您的请求网址以:
结尾&format=json&jsoncallback=1';
参数的正确名称是 nojsoncallback ,因此您应该使用的正确URL如下所示:
&format=json&nojsoncallback=1';
改变它,它应该有用。
问候。
答案 1 :(得分:17)
那是因为返回的数据无效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 );
答案 2 :(得分:2)
更好的是,不要在你的网址中使用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);
答案 3 :(得分:0)
堆栈溢出再次节省了一天。我搜索了flickr文档,发现没有注意到这个“nojsoncallback”参数。
谁默认制作这样的功能,然后不告诉任何人如何禁用它?
更糟糕的是,为什么要编写你必须ENable才能使功能失效?!
荒谬......但是感谢抬头,这解决了我的问题!
答案 4 :(得分:0)
nojsoncallback 的详细信息位于此页面的底部https://www.flickr.com/services/api/response.json.html