6
votes

Fusionner deux objets JSON par programme

J'ai deux objets JSON ici, générés par l'API de recherche Google. L'URL de ces objets peut être trouvé ci-dessous.

http: //ajax.googleapis .Com / Ajax / Services / Recherche / Web? V = 1.0 & Q = Bonjour% 20World & RSZ = grand http: //ajax.googleaps. Com / Ajax / Services / Rechercher / Web? V = 1.0 & Q = Bonjour% 20World & RSZ = Grand & Démarrage = 8

Comme vous pouvez le voir, la première URL renvoie les huit premiers résultats, tandis que le second retourne les huit suivants. Au lieu de vérifier ces résultats séparément, je voudrais les les fusionner dans un objet JSON et les transmettre à travers les seize premiers résultats.

J'ai tenté cela avec un couple d'objets JSON extrêmement simples, mais ce que Google revient est encore un peu au-dessus de ma tête, alors j'espère un peu d'aide pour faire une telle chose.

Autant que je me soit dit, il n'est pas contre les conditions de service de Google pour fusionner deux objets en un, seuls ceux-ci suivent toujours deux résultats (qu'ils le feront). Certains amis m'ont signalé dans la direction d'outils automatisés capables de faire de telles choses, mais je dois encore trouver un tel outil.

Je travaille actuellement dans ASP.NET SO C # ou VB.NET CODE est génial, mais je suis un peu indépendant de la langue afin que toute aide dans une langue sera très appréciée.

Quelqu'un peut-il fournir une aide et / ou des conseils à faire une telle chose?

EDIT: Ces résultats seront éventuellement enregistrés dans une base de données, de sorte que toutes les méthodes côté serveur seraient fantastiques, même si cela signifie les mettre directement dans une table pour traiter plus tard.


1 commentaires

Il est possible que quelqu'un a déjà écrit un wrapper C # Google API ... Ceci semble prometteur: CODEPLEX.COM/GAPIDOTNET


8 Réponses :


0
votes

Je ne suis pas sûr de savoir comment vous fusionner ces choses complètement, étant donné qu'il y a beaucoup de données supplémentaires dans chaque mesure des résultats eux-mêmes, mais si vous voulez simplement une matrice JavaScript contenant tous les 16 résultats, cela devrait fonctionner. ..

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


1 commentaires

Le message demande une solution .NET, pas une solution JavaScript ... J'ai fait la même erreur, mais je pense qu'il est préférable de supprimer les solutions JavaScript pour aider à désencombrer la question.



1
votes

Aussi, si vous voulez vraiment faire la manipulation des résultats Server-face au serveur, Cet article semble donner une procédure pas à pas raisonnable du processus.


1 commentaires

J'ai déjà lu cette approche déjà, et tandis que cela semble assez simple avec des objets JSON simples que j'ai luttés avec la sortie folle de Google. Mon objectif général est de montrer à tous les résultats de la recherche de douze résultats et de les saisir dans une base de données, ce qui serait donc formidable s'ils pouvaient être saisis individuellement et ajoutés aux variables dans une page ASP.NET. Je vais donner cette méthode une autre essai bientôt et poster mes résultats.



1
votes

Si vous êtes à la suite d'une solution secondaire client (JavaScript), qu'en est-il d'essayer la fonction "Unite" que j'ai écrit: http://code.google.com/p/av-jslib/source/browse/js/av.ext.Object. JS # 36


0 commentaires

1
votes

Plutôt que de fusionner les deux résultats ensemble, je viens de décider de les analyser, puis de lier ces deux ensemble. À la fin, il n'était vraiment pas nécessaire de fusionner les deux ensemble quand ils pourraient être facilement rejoints dans une base de données.


0 commentaires

4
votes
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}

1 commentaires

Cela ne fonctionnera évidemment pas pour des objets imbriqués - envisagez la fusion de deux objets: {"A": {"B": 5}} et {"A": {"C": 5 }} - le résultat doit être {"A": {"B": 5, "C": 5}} , alors que ce qui précède retournera {"A" : {"C": 5}} . Cependant, condition supplémentaire: pour (var z dans ob) {si (ob.hasownProperty (z)) {if (O [z] && typeof o [z] == 'objet' && typeof ob [z] = = 'objet') o [z] = O [z] .merge (OB [Z]); sinon o [z] = ob [z]; }} devrait le corriger (non testé).



11
votes
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 commentaires

1
votes

avec jQuery, vous pouvez le faire!

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

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


0 commentaires

0
votes

Pour le rendre plus propre, vous pouvez ajouter la fonction fusion code> à l'objet JSON. C'est la solution de Johan Van de Merwe basée sur la réponse d'Elliot, ajoutée à l'objet JSON actuel.

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

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

  return o;
}

json3 = JSON.merge(json1,json2);


0 commentaires