代码之家  ›  专栏  ›  技术社区  ›  Mike B

以编程方式合并两个JSON对象

  •  6
  • Mike B  · 技术社区  · 15 年前

    我这里有两个JSON对象,它们是通过Google搜索API生成的。下面可以找到这些对象的URL。

    http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=hello%20world&rsz=large http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=hello%20world&rsz=large&start=8

    如您所见,第一个URL返回前八个结果,而第二个URL返回下八个结果。我不想单独检查这些结果,而是想 以编程方式 将它们合并到一个JSON对象中,并作为前16个结果传递它们。

    据我所知,将两个对象合并为一个对象并不违反谷歌的服务条款,只是这些对象总是作为两个结果(他们会这样做)。一些朋友已经为我指出了能够做这些事情的自动化工具的方向,但我还没有找到这样的工具。

    我目前在ASP.NET中工作,所以C#或VB.NET代码很棒,但我有点独立于语言,因此任何语言中的任何帮助都将非常感谢。

    有人能提供任何帮助和/或建议吗?

    编辑: 这些结果最终将被保存到数据库中,因此任何服务器端方法都将是非常棒的,即使这意味着将它们直接放在一个表中以便以后处理。

    8 回复  |  直到 15 年前
        1
  •  11
  •   Musakkhir Sayyed    9 年前
    function MergeJSON (o, ob) {
          for (var z in ob) {
               o[z] = ob[z];
          }
          return o;
    }
    

    这看起来很像Elliot的代码,但在某些情况下更安全。它没有向对象添加函数,这可能导致在与Extjs或jQuery等框架一起使用时出现一些语法问题。我的问题是,在事件侦听器中使用时,它给了我语法上的问题。但是埃利奥特得到了荣誉,他完成了任务。

    a = {a : 1}
    b = {b : 2}
    c = {c : 3}
    
    x = MergeJSON ( a, b);
    x = MergeJSON ( x, c);
    
    result : x  == {a : 1, b : 2, c : 3}
    

    谢谢你,艾略特

        2
  •  4
  •   sjngm quinti    13 年前
    Object.prototype.merge = (function (ob) {
        var o = this;
        var i = 0;
        for (var z in ob) {
            if (ob.hasOwnProperty(z)) {
                o[z] = ob[z];
            }
        }
        return o;
    })
    
    var a = {a:1}
    var b = {b:2}
    
    var c = a.merge(b); // === {a:1,b:2}
    
        3
  •  1
  •   Domenic    15 年前

    另外,如果您真的想在服务器端执行结果操作, this article 似乎给出了一个相当合理的过程演练。

        4
  •  1
  •   Mike B    15 年前

    我没有将这两个结果合并在一起,而是决定解析它们,然后将它们链接在一起。最后,当它们可以很容易地在数据库中连接时,实际上没有必要将它们合并在一起。

        5
  •  1
  •   BYK    14 年前

    如果您正在使用客户端解决方案(实际上是JavaScript),那么试试我编写的“unite”函数怎么样: http://code.google.com/p/av-jslib/source/browse/js/aV.ext.object.js#36

        6
  •  1
  •   CoolBeans Jake    13 年前

    使用Jquery,您可以做到这一点!

    a = $.extend({a:1}, {b:2});
    
    result: Object { a=1,  b=2}
    

    http://api.jquery.com/jQuery.extend/

        7
  •  0
  •   Domenic    15 年前

    var responses = [GetJsonObjectFromThatUriUsingJqueryOrSomething(),
                     GetJsonObjectFromThatOtherUriUsingJqueryOrSomething()];
    
    // Probably want to check for success
    // and ensure that responses[i].responseData.results is valid.
    
    var results = [];
    for (var i = 0; i < responses.length; ++i)
    {
        results = results.concat(responses[i].responseData.results);
    }
    
        8
  •  0
  •   Max Kielland    13 年前

    为了使它更整洁,您可以添加 merge 函数调用JSON对象。 这是Johan van de Merwe基于Elliot答案的解决方案,添加到实际的JSON对象中。

    // Extend JSON object
    JSON.merge = function (o,ob) {
    
      for (var z in ob) {
        o[z] = ob[z];
      }
    
      return o;
    }
    
    json3 = JSON.merge(json1,json2);