合并来自json的2个数据响应

时间:2012-09-05 15:12:54

标签: jquery json twitter

如果我这样做是为了争论:

$.when(
    $.getJSON('http://myUrlOne/?format=json'),
    $.getJSON('http://myUrlTwo/?format=json')
).then(function () {
    // how can i merge the response from both json requests before processing them
});

这两个url都在twitter api上,但其中一个是关键字搜索,一个是常规用户时间轴调用。

我正在尝试修改一个twitter插件,通过搜索@username(在第二个json请求中)显示用户名时间轴(在第一个json请求中)和@username提及

请参阅我要修改的当前函数以调用2个URL并在处理之前合并数据:

  $.getJSON(build_api_url(), function(data){
    var tweets = $.map(data.results || data, extract_template_data);
    tweets = $.grep(tweets, s.filter).sort(s.comparator).slice(0, s.count);
    $(widget).trigger("tweet:retrieved", [tweets]);
  });

这不起作用:

 $.when(
  $.getJSON(build_api_url(),
  $.getJSON(build_user_url()
  ).done( function(json1, json2) {
 var data = $.extend(json1, json2)
      // json1 and json2 represent the returned json, so just combine them as needed here
      var tweets = $.map(data.results || data, extract_template_data);
      tweets = $.grep(tweets, s.filter).sort(s.comparator).slice(0, s.count);
      $(widget).trigger("tweet:retrieved", [tweets]);
  });

3 个答案:

答案 0 :(得分:1)

$.when(
    $.getJSON('http://myUrlOne/?format=json'),
    $.getJSON('http://myUrlTwo/?format=json')
).then(function (a1, a2) {
    // First get the two objects from json
    // (you could check statusText in a1[1] if desired) :
    var obj1 = JSON.parse(a1[2].responseText);
    var obj2 = JSON.parse(a2[2].responseText);
    // Then, if you want to "merge" them you can do this :
    var obj = obj1;
    for (var key in obj2) {
        obj[key] = obj2[key]; // this will replace obj1[key] you have to know how you want to merge
    }
    // use obj
});

答案 1 :(得分:0)

我首先探索jQuery.extend()。类似于$.extend(json1, json2)

答案 2 :(得分:0)

您可能希望使用$.when().done()这样的方法:

$.when(
    $.getJSON('http://myUrlOne/?format=json'),
    $.getJSON('http://myUrlTwo/?format=json')
).done( function(json1, json2) {
    // json1 and json2 represent the returned json, so just combine them as needed here
});

当然,如果您需要处理请求中的失败,那么您需要使用$.when().then()。你没有在你的例子中显示使用失败回调,这就是为什么我建议done()而不是then()