2009-07-29 172 views
6

我有兩個JSON對象這裏,通過谷歌搜索API生成。這些對象的URL可以在下面找到。合併兩個JSON對象編程

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對象,並通過將它們作爲前十六結果。

我和幾個非常簡單的JSON對象的嘗試這一點,但什麼谷歌返回仍然是我的頭有點上面,所以我希望能有點用做這樣的事的幫助。

至於有人告訴我這是不是對谷歌的服務條款,以兩個對象合併爲一個,只有這些總是通過兩個結果(他們會)。有些朋友指出我可以做自動化工具的方向,但我還沒有找到這樣的工具。

我目前在ASP.NET中工作,所以C#或VB.NET代碼是偉大的,但我有點語言無關所以在任何語言的任何幫助將是非常讚賞。

任何人都可以提供做這樣的事情任何幫助和/或建議嗎?

編輯:這些結果最終將被保存到數據庫中,所以任何服務器端方法都會非常棒,即使這意味着將它們直接放入表中以便稍後處理。

+0

有可能已經有人寫了一個C#谷歌API的包裝......這看起來很有希望:http://www.codeplex.com/GAPIdotNET – Domenic 2009-07-29 10:06:17

回答

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

這看起來很像從艾略特的代碼,但在某些時候是多了一點安全。它不會在對象中添加一個函數,這會導致一些語法問題,與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} 

謝謝艾略特

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); 
} 
+0

的職位是要求.NET解決方案,而不是一個JavaScript解決方案...我犯了同樣的錯誤,但我認爲最好刪除JavaScript解決方案以幫助解決問題。 – Blixt 2009-07-29 09:46:28

1

另外,如果你真的想這樣做的結果操縱服務器片面的,this article似乎給過程的相當合理的演練。

+0

我已經閱讀過這種方法,雖然它看起來很簡單,但使用簡單的JSON對象來處理Google的瘋狂輸出。我的總體目標是顯示全部12個搜索結果並將它們輸入到數據庫中,因此,如果它們可以單獨抓取並添加到ASP.NET頁面中的變量,那將是非常好的。我會很快再次嘗試這種方法,併發布我的結果。 – 2009-07-29 09:37:40

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} 
+0

這顯然不適用於嵌套對象 - 考慮合併兩個對象:`{「a」:{「b」:5}}和`{「a」:{「c」:5}} - 結果應該是`{「a」:{「b」:5,「c」:5}}`,而上述將返回`{「a」:{「c」:5}}`。 然而,附加條件: '爲(在OB變種Z){ 如果(ob.hasOwnProperty(Z)){ 如果(O [Z] &&的typeofö[Z] == '對象' && typeof運算的ob [z] =='object') o [z] = o [z] .merge(ob [z]);其他 o [z] = ob [z]; } }` 應該修復它(未測試)。 – eithed 2012-02-23 15:11:36

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);