如何使用php仅获取json文件的一部分而不是整个文件?

如何使用php仅获取json文件的一部分而不是整个文件?,php,json,file,api,Php,Json,File,Api,我正在连接到trakt.tv api,我想为自己创建一个小应用程序,显示电影海报和收视率等 这就是我目前用来检索他们的.json文件的东西,该文件包含我需要的所有信息 $json = file_get_contents('http://api.trakt.tv/movies/trending.json/2998fbac88fd207cc762b1cfad8e34e6'); $movies = json_decode($json, true); $movies = array_slice($mo

我正在连接到trakt.tv api,我想为自己创建一个小应用程序,显示电影海报和收视率等

这就是我目前用来检索他们的.json文件的东西,该文件包含我需要的所有信息

$json = file_get_contents('http://api.trakt.tv/movies/trending.json/2998fbac88fd207cc762b1cfad8e34e6');
$movies = json_decode($json, true);

$movies = array_slice($movies, 0, 20);

foreach($movies as $movie) {
    echo $movie['images']['fanart'];
}
因为.json文件很大,所以加载速度非常慢。我只需要文件中的几个属性,比如标题、评级和海报链接。除此之外,我只需要前20个左右。如何确保只加载.json文件的一部分以更快地加载它


除此之外,我对php与.json的结合没有经验,因此如果我的代码是垃圾代码,并且您有建议,我很想听听。

除非API提供了
limit
参数或类似参数,否则我认为您无法限制您这边的查询。快速看一看,它似乎没有提供这一点。它看起来也不是真的返回那么多数据(100KB以下),所以我猜它的速度很慢

如果API速度慢,我会缓存您收到的数据,并且大约每小时只更新一次。您可以使用
file\u put\u contents
将其保存到服务器上的文件中,并记录保存时间。需要使用数据时,如果保存的数据超过一小时,请刷新它

这个想法的速写很有效:

function get_trending_movies() {
    if(! file_exists('trending-cache.php')) {
        return cache_trending_movies();
    }

    include('trending-cache.php');
    if(time() - $movies['retreived-timestamp'] > 60 * 60) { // 60*60 = 1 hour
        return cache_trending_movies();
    } else {
        unset($movies['retreived-timestamp']);
        return $movies;
    }
}

function cache_trending_movies() {
    $json = file_get_contents('http://api.trakt.tv/movies/trending.json/2998fbac88fd207cc762b1cfad8e34e6');
    $movies = json_decode($json, true);
    $movies = array_slice($movies, 0, 20);
    $movies_with_date = $movies;
    $movies_with_date['retreived-timestamp'] = time();
    file_put_contents('trending-cache.php', '<?php $movies = ' . var_export($movies_with_date, true) . ';');
    return $movies;
}

print_r(get_trending_movies());
函数get\u trending\u movies(){
如果(!file_存在('trending-cache.php')){
返回缓存_趋势_电影();
}
包括('trending-cache.php');
如果(time()-$movies['retreived-timestamp']>60*60){//60*60=1小时
返回缓存_趋势_电影();
}否则{
未设置($movies['retrieved-timestamp']);
归还$3部电影;
}
}
函数缓存\趋势\电影(){
$json=file\u get\u contents('http://api.trakt.tv/movies/trending.json/2998fbac88fd207cc762b1cfad8e34e6');
$movies=json_decode($json,true);
$movies=array\u slice($movies,0,20);
$movies\u with_date=$movies;
$movies_,带_日期['retreived-timestamp']=time();

文件内容('trending-cache.php',这会更复杂一些。你需要一个JSON流解码器,也就是说,它可以让你在JSON数据流入时解码,而不需要一次完成全部工作。然后你就可以开始下载JSON数据,边走边解码,随时停止这个过程。我不知道具体的图书馆虽然我确信它们确实存在,但也可以这样做。而且,响应非常慢(对我来说大约需要一秒钟),因此您可能需要定义“加载非常慢”。也许这不是你的php代码,而是api?也许甚至可以用来缓存已解析的json。无需多次解析。更好的是:使用后台任务刷新数据,这样前端将只访问缓存的数据,而不必等待。我最初的想法是使用cron作业,但这是基本想法。给定OP没有太多时间使用PHP的经验我认为这将是一个很好的起点。@ZougenMoriver是的,这就是我的意思。;)谢谢,我还没有考虑缓存它,这似乎是最好的选择。谢谢你们的帮助,非常感谢。