Question

J'ai deux objets JSON ici, générés par l'API de recherche Google. se trouvent de ces objets l'URL ci-dessous.

http: //ajax.googleapis .com / ajax / services / recherche / web? v = 1.0 & q = bonjour% 20World & SPER = grand http: //ajax.googleapis. com / ajax / services / recherche / web? v = 1.0 & q = bonjour% 20World & SPER = grand & start = 8

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

J'ai essayé cela avec quelques objets JSON extrêmement simples, mais ce qui rend Google est encore un peu au-dessus de ma tête, donc je suis l'espoir d'un peu d'aide à faire une telle chose.

Pour autant que j'ai dit que ce n'est pas contre les conditions d'utilisation de Google pour fusionner deux objets en un seul, seulement que ceux-ci vont toujours par deux comme résultats (qu'ils seront). Quelques amis me l'ont fait dans le sens des outils automatisés qui sont capables de faire de telles choses, mais je ne suis pas encore trouvé un tel outil.

Je travaille actuellement au sein de ASP.NET si code C # ou VB.NET est grande, mais je suis un peu la langue indépendante pour toute aide dans toutes les langues sera très apprécié.

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

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

Était-ce utile?

La solution

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

Cela ressemble beaucoup comme le code d'Elliot, mais est un peu plus sûr dans certaines conditions. Il n'ajoute une fonction à l'objet, ce qui pourrait conduire à des problèmes de syntaxe, lorsqu'ils sont utilisés avec un cadre comme Extjs ou jQuery. J'ai eu le problème qu'il m'a donné des problèmes dans la syntaxe lorsqu'il est utilisé dans un écouteur d'événement. Mais les crédits vont à Elliot, il a fait le travail.

Utilisez ceci comme suit:

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}

Merci Elliot

Autres conseils

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}

Avec Jquery, vous pouvez le faire!

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

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

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

Je ne sais pas comment vous fusionner ces choses complètement, étant donné qu'il ya beaucoup de données supplémentaires dans chaque dehors des résultats eux-mêmes, mais si vous voulez juste un tableau JavaScript contenant 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);
}

Pour le rendre plus propre, vous pouvez ajouter la fonction merge à l'objet JSON. C'est la solution de Johan van de Merwe basé sur la réponse d'Elliot, a ajouté à l'objet JSON réelle.

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

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

  return o;
}

json3 = JSON.merge(json1,json2);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top