Json_decode在Flickr API中不起作用

Ada*_*Mo. 3 php json flickr

我有这个代码

$feed_Flickr = 'http://api.flickr.com/services/feeds/photos_public.gne?id=44545397@N03&lang=en-us&format=json';
    $Flickr = file_get_contents($feed_Flickr);
    $Flickr = str_replace('jsonFlickrFeed(','',$Flickr);
    $Flickr = str_replace('})','}',$Flickr);
    $flickrvalue = json_decode($Flickr);
    print_r($flickrvalue);
Run Code Online (Sandbox Code Playgroud)

print_r没有返回代码有什么问题?

Ama*_*ali 6

数据无效JSON,这就是为什么json_decode()不起作用.您可以尝试使用jsonlint.com等网站进行验证.

json_decode()文档:

如果无法解码json或编码数据深于递归限制,则返回NULL.

这就解释了为什么你没有获得任何产出.

更新:

事实证明,Flickr转义单引号('),显然这是不允许的,并使JSON无效.你可以用它str_replace()来解决这个问题:

$flickrResponse = str_replace("\\'", "'", $Flickr);
Run Code Online (Sandbox Code Playgroud)

此外,正如Flickr API文档所说,您可以通过将nojsoncallback带有值的参数附加1到URL 来获取原始JSON,而不是使用普通的JSON ,如下所示:

http://api.flickr.com/services/feeds/photos_public.gne?id=44545397@N03&lang=en-us&format=json&nojsoncallback=1

因此,通过这些更改,我们的代码应该正常工作:

$feed_Flickr = 'http://api.flickr.com/services/feeds/photos_public.gne?id=44545397@N03&lang=en-us&format=json&nojsoncallback=1';
$Flickr = file_get_contents($feed_Flickr);
$flickrResponse = str_replace("\\'", "'", $Flickr);
$results = json_decode($flickrResponse, true);
print_r($results);
Run Code Online (Sandbox Code Playgroud)

演示!