我在这里有两个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=hello%20world&rsz=large&start=8
如您所见,第一个URL返回前八个结果,而第二个返回后八个结果。我不想单独检查这些结果,而是以编程方式将它们合并到一个JSON对象中,并将它们作为前16个结果传递给它。
我用几个非常简单的JSON对象尝试过这个,但Google返回的内容仍然有点高于我的头脑,所以我希望能帮助你做一些这样的事情。
据我所知,将两个对象合并为一个并不违反Google的服务条款,只有这两个对象总是通过两个结果(他们会这样做)。有些朋友指出了能够做这些事情的自动化工具的方向,但我还没有找到这样的工具。
我目前在ASP.NET中工作,所以C#或VB.NET代码很棒,但我有点语言独立,所以任何语言的帮助都会非常受欢迎。
任何人都可以在做这样的事情时提供任何帮助和/或建议吗?
编辑:这些结果最终将保存到数据库中,因此任何服务器端方法都会非常棒,即使这意味着将它们直接放入表中以便稍后处理。
答案 0 :(得分: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}
谢谢Elliot
答案 1 :(得分: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}
答案 2 :(得分:1)
另外,如果你真的想在服务器端进行结果操作,this article似乎给出了一个非常合理的流程演练。
答案 3 :(得分:1)
如果你是一个客户端解决方案(实际上是JavaScript)那么尝试我写的“联合”功能怎么样:http://code.google.com/p/av-jslib/source/browse/js/aV.ext.object.js#36
答案 4 :(得分:1)
我没有将两个结果合并在一起,而是决定解析它们,然后将这两个结合起来。最后,当它们可以轻松地在数据库中连接时,实际上没有必要将它们合并在一起。
答案 5 :(得分:1)
使用Jquery你可以做到这一点!
a = $.extend({a:1}, {b:2});
result: Object { a=1, b=2}
答案 6 :(得分: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);
}
答案 7 :(得分: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);