6

我在这里有两个 JSON 对象,通过 Google Search 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 =你好%20world&rsz=大&开始=8

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

我已经尝试使用几个非常简单的 JSON 对象来实现这一点,但是 Google 返回的结果仍然有点超出我的想象,所以我希望在做这样的事情时能得到一些帮助。

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

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

任何人都可以就做这样的事情提供任何帮助和/或建议吗?

编辑:这些结果最终将保存到数据库中,因此任何服务器端方法都会很棒,即使这意味着将它们直接放入表中以供以后处理。

4

8 回答 8

11
function MergeJSON (o, ob) {
      for (var z in ob) {
           o[z] = ob[z];
      }
      return o;
}

这看起来很像 Elliot 的代码,但在某些情况下更安全一些。当与 Extjs 或 jQuery 等框架一起使用时,它不会向对象添加函数,这可能会导致一些语法问题。我遇到的问题是,它在事件侦听器中使用时给我的语法带来了问题。但归功于 Elliot,他完成了这项工作。

使用如下:

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}

谢谢艾略特

于 2010-08-06T18:58:13.403 回答
4
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}
于 2010-05-18T05:59:37.547 回答
1

此外,如果你真的想在服务器端进行结果操作,这篇文章似乎给出了一个相当合理的过程演练。

于 2009-07-29T09:22:55.210 回答
1

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

于 2009-07-29T10:10:33.917 回答
1

我没有将这两个结果合并在一起,而是决定解析它们,然后将这两个结果链接在一起。最后,当它们可以轻松地在数据库中连接时,真的不需要将它们合并在一起。

于 2010-01-11T16:12:29.807 回答
1

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

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

result: Object { a=1,  b=2}

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

于 2010-11-02T16:27:27.530 回答
0

我不确定你如何完全合并这些东西,因为除了结果本身之外,每个东西都有很多额外的数据,但如果你只想要一个包含所有 16 个结果的 JavaScript 数组,这应该可以工作......

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);
}
于 2009-07-29T09:18:35.763 回答
0

为了使其更整洁,您可以将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);
于 2011-11-23T03:21:41.600 回答