3

我有这个代码

$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);

print_r 什么也不返回 代码有什么问题?

4

2 回答 2

6

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

json_decode()文档中:

如果无法解码 json 或编码的数据深度超过递归限制,则返回 NULL。

这就解释了为什么你没有得到任何输出。

更新:

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

$flickrResponse = str_replace("\\'", "'", $Flickr);

此外,正如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);

演示!

于 2013-09-16T13:47:48.237 回答
0

你拼错了变量!

快看!

 $Flickr = str_replace('})','}',$Flickrn);
于 2013-09-16T13:38:10.463 回答