2009-07-29 22 views
6

Ich habe zwei JSON-Objekte hier, generiert über die Google Search API. Die URLs dieser Objekte finden Sie unten.Join zwei JSON-Objekte programmgesteuert

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

Wie Sie die erste URL die ersten acht gibt Ergebnisse sehen können, während der zweite die nächsten acht zurück. Anstatt diese Ergebnisse separat zu überprüfen, möchte ich programmatisch zusammenführen sie in ein JSON-Objekt und übergeben sie als die ersten sechzehn Ergebnisse.

Ich habe dies mit ein paar sehr einfachen JSON-Objekten versucht, aber was Google zurückgibt, ist immer noch ein bisschen über meinem Kopf, also hoffe ich auf etwas Hilfe bei solch einer Sache.

Soweit ich gesagt habe ist es nicht gegen Googles Nutzungsbedingungen, zwei Objekte zu einem zusammenzuführen, nur dass diese immer als zwei Ergebnisse durchgehen (was sie auch tun werden). Einige Freunde haben mich auf automatisierte Tools hingewiesen, die in der Lage sind, solche Dinge zu tun, aber ich muss noch ein solches Tool finden.

Ich arbeite derzeit in ASP.NET so C# oder VB.NET Code ist großartig, aber ich bin etwas sprachunabhängig, so dass jede Hilfe in jeder Sprache sehr geschätzt wird.

Kann jemand Hilfe und/oder Ratschläge geben, um so etwas zu tun?

EDIT: Diese Ergebnisse werden schließlich in einer Datenbank gespeichert werden, so dass alle serverseitigen Methoden fantastisch wären, auch wenn es bedeutet, sie direkt in eine Tabelle für später zu behandeln.

+0

Es ist möglich, jemand bereits einen C# Google API-Wrapper geschrieben hat ... das sieht vielversprechend aus: http://www.codeplex.com/GAPIdotNET – Domenic

Antwort

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

Dies sieht viel wie der Code von Elliot, aber ein bisschen sicherer in manchen Bedingungen ist. Es fügt dem Objekt keine Funktion hinzu, was zu einigen Syntaxproblemen führen kann, wenn es in einem Framework wie Extjs oder jQuery verwendet wird. Ich hatte das Problem, dass es mir Probleme in der Syntax gab, wenn es in einem Ereignis-Listener verwendet wurde. Aber Credits gehen an Elliot, er hat den Job gemacht.

verwenden, wie folgend:

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} 

Danke Elliot

0

Ich bin nicht sicher, wie Sie diese Dinge komplett zusammenführen würden, da es abgesehen von den Ergebnissen viele zusätzliche Daten gibt, aber wenn Sie nur ein JavaScript-Array mit allen 16 Ergebnissen wünschen, sollte das funktionieren ...

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

Der Beitrag wird für eine .NET-Lösung zu fragen, nicht eine JavaScript-Lösung ... Ich habe den gleichen Fehler gemacht, aber ich denke, es ist am besten, die JavaScript-Lösungen zu löschen, um die Frage zu entschärfen. – Blixt

1

auch, wenn Sie wirklich die Ergebnisse Manipulation serverseitige tun wollen, this article scheint einen ziemlich vernünftigen Durchlauf des Prozesses zu geben.

+0

Ich habe diesen Ansatz bereits gelesen, und obwohl es mit einfachen JSON-Objekten einfach genug zu sein scheint, habe ich mit Googles verrückten Ergebnissen zu kämpfen. Mein übergeordnetes Ziel ist es, alle zwölf Suchergebnisse anzuzeigen und sie in eine Datenbank einzugeben. Es wäre also großartig, wenn sie einzeln erfasst und zu Variablen innerhalb einer ASP.NET-Seite hinzugefügt werden könnten. Ich werde diese Methode noch einmal versuchen und meine Ergebnisse veröffentlichen. –

1

Anstatt zu verschmelzen die beiden Ergebnisse zusammen, ich habe gerade beschlossen, sie zu analysieren, dann Verknüpfen Sie diese beiden zusammen. Am Ende war es wirklich nicht nötig, die beiden zusammenzufassen, wenn sie einfach in eine Datenbank eingebunden werden konnten.

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

Dies wird offensichtlich nicht für verschachtelte Objekte funktionieren - erwägen Sie die Verschmelzung von zwei Objekten: '{" a ": {" b ": 5}}' und '{" a ": {" c ": 5}}' - das Ergebnis sollte "{" a ": {" b ": 5," c ": 5}}' sein, während das obige "{" a ": {" c ": 5}}' zurückgibt. jedoch zusätzliche Bedingung: 'für (var z in OB) { if (ob.hasOwnProperty (z)) { if (o [z] && Typeof o [z] == 'object' && Typeof OB [z] == "Objekt") o [z] = o [z] .merge (ob [z]); sonst o [z] = ob [z]; } } ' sollte es beheben (nicht getestet). – eithed

0

Um es ordentlich, können Sie die merge Funktion des JSON-Objekt hinzufügen können. Dies ist die Lösung von Johan van de Merwe basierend auf Elliots Antwort, die dem eigentlichen JSON-Objekt hinzugefügt wurde.

// Extend JSON object 
JSON.merge = function (o,ob) { 

    for (var z in ob) { 
    o[z] = ob[z]; 
    } 

    return o; 
} 

json3 = JSON.merge(json1,json2);