当前位置: 首页 > 面试题库 >

jQuery:合并多个JSON结果

牛枫
2023-03-14
问题内容

情况: 用户想使用Youtube的JSON API在JQuery网站中导入Youtube播放列表。

问题: Youtube仅返回前50个条目,但是播放列表的长度可能超过100个条目(长度由JSON响应中的“
totalItems”给出)。所有条目都需要合并为1个对象,最后需要将其推入到输出函数中。

条目1-50:http :
//gdata.youtube.com/feeds/api/playlists/84780DAC99E1A285? v=2&alt=jsonc&max-results=50&start-
index=1

条目50-100:http :
//gdata.youtube.com/feeds/api/playlists/84780DAC99E1A285? v=2&
alt= jsonc&
max- results=50&
start-
index=50

当前代码:

function fetchPlaylist(pid) {
    var the_url = 'http://gdata.youtube.com/feeds/api/playlists/' + encodeURIComponent(pid) + '?v=2&alt=jsonc&max-results=50';
    $.ajax({
        type: "GET",
        url: the_url,
        dataType: "jsonp",
        success: function (responseData, textStatus, XMLHttpRequest) {
            if (responseData.data != null) {
                if (responseData.data.items) {
                    outputFunction(responseData.data.items);
                } else {
                    console.log('No results for playlist: "' + pid + '"');
                }
            }
        }
    });
}

题:

  1. 在接收所有条目之前重复JSON调用的最有效方法是什么?

  2. 如何将不同的响应组合成一个对象

我尝试过的

由于复杂/嵌套的情况,使用http://api.jquery.com/jQuery.extend/合并时陷入困境


问题答案:

因为只需要数组项,所以可以$.merge()在重复函数中使用:

function fetchPlaylist(pid, start, items) {
  items = items || [];
  start = start || 0;
  var the_url = 'http://gdata.youtube.com/feeds/api/playlists/' + encodeURIComponent(pid) + '?v=2&alt=jsonc&max-results=50';
  $.ajax({
      type: "GET",
      url: the_url,
      data: { start: start },
      dataType: "jsonp",
      success: function(responseData, textStatus, XMLHttpRequest) {
        if (responseData.data != null) {
          if (responseData.data.items) {
            $.merge(items, responseData.data.items); //add to items
            if (responseData.data.totalItems > start + 50) {
                fetchPlaylist(pid, start + 50, items);
            } else {
                outputFunction(items);
            }
          } else {
            console.log('No results for playlist: "' + pid + '"');
          }
        }
      }
  });
}

您可以在这里尝试一下,只需使用播放列表ID进行调用即可,如下所示:

fetchPlaylist("84780DAC99E1A285");​

每次请求完成时,我们都会查看totalItemsyoutube返回的值是否高于请求的值加50,如果是这种情况,请再次获取并添加这些结果…如果没有,那么我们将合并的数组传递给outputFunction()



 类似资料:
  • 我有索引,其中每个文档都有这样的结构: 我需要计算每个演员对应的电影数量(演员可以在actor_1_name、actor_2_name或actor_3_name字段中) 这3个字段的映射是: 有没有一种方法,我可以聚合的结果,可以结合所有3个演员领域的条款,并给出一个单一的聚合。 目前,我正在为每个actor字段创建单独的聚合,并通过我的JAVA代码将这些不同的聚合合并成一个。 通过创建不同的聚合

  • 在我的自动化项目中,我有两个跑步者,如下所示: > 主运行程序-执行所有标记的测试用例,如果场景失败将填充场景位置(例如): 次要运行程序-从重新执行场景: 执行执行时,将创建两个结果json文件: Jenkins将通过插件收集结果,并创建一个组合报告。 问题是,即使在第二次运行中通过了所有测试,由于,报告状态仍将失败。 有没有一种方法(设置插件或修改上面显示的运行程序)用的结果覆盖,并且只发布修

  • 问题内容: 我有以下输入-2个json文件,一个是基础文件,第二个包含相同的属性,但值不同,我想合并这些对象。 例如: 第二个文件: 结果应该是这样的: 使用powershell可以做到吗? 问题答案: (请参见下面的更新) 结果: 您可能会考虑不覆盖左值: 在这种情况下,结果将是: 更新2019年11月16日 的参数已经被耗尽,分过和参数(遗憾的重大更改)。好消息是,对象合并的默认参数设置包含在

  • 我正在使用RoomDatabase、存储库、Viewmodel和LiveData。区域与网关有1到n的关系,网关与项有1到n的关系。我创建了一个AreaWithGateways实体和一个GatewayWithItems实体。 项可以从一个网关移动到另一个网关,这就是为什么我用Livedata观察它们,以跟踪它们在哪个网关中。我现在的问题是,我发现自己也需要跟踪哪些项目在哪些区域,我不知道如何做到这

  • (注意这不是按字母顺序,蓝莓排在狒狒之前) 当然,只要有一个列表不是空的,我就可以用一个计数器在“superlist”中循环,一个接一个地向resultslist中添加项目: 但最好使用一些优化的LINQ函数来实现这一点。我一直在研究Zip、GroupBy和Aggregate,但无法使它们工作。 那么:有没有一个漂亮的LINQ函数,或者多个函数的组合,可以把它变成漂亮的代码,或者我应该坚持(也许优

  • 问题内容: 我整个上午都在搜索,但是大多数合并示例仅基于一个键,而在多个键上却找不到任何东西。 pid = 111,sid = 6,eid = 123的值在x和y中都匹配,然后合并为一条记录。如果它们不匹配,只需将其原样带过来。 我想要的最终结果: 问题答案: 这是从元组中重新锁定: