Я пытаюсь декодировать строку json, возвращенную из flickr в рамках моего кода PHP. Я использую ЗАВИХРЕНИЕ, но это продолжает возвращать строку, даже когда я переношу json_decode () вокруг json sring переменная. Какие-либо идеи?
$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 );
URL-адрес вашего запроса заканчивается на:
&format=json&jsoncallback=1';
Правильное имя параметра - nojsoncallback , поэтому правильный URL-адрес, который вы должны использовать, заканчивается следующим образом:
&format=json&nojsoncallback=1';
Измените это, и он должен работать.
С уважением.
Сохранение переполнения стека день снова. Я просмотрел документацию flickr и не нашел НИКАКИХ УКАЗАНИЙ об этом параметре nojsoncallback.
кто делает такую функцию по умолчанию, а затем никому не говорит, как ее отключить?
даже хуже, почему было написано, что вы должны включить ее, чтобы отключить функцию ?!
смешно ... но спасибо за внимание, это устранило мою проблему!
Еще лучше, вместо использования format = json в вашем URL, используйте 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);