Pregunta

Tengo dos objetos JSON aquí, generada a través de la API de búsqueda de Google. La URL de uno de estos objetos se pueden encontrar a continuación.

http: //ajax.googleapis .com / ajax / servicios / Búsqueda / web? v = 1,0 y q = Hola% 20world y rsz = gran http: //ajax.googleapis. com / ajax / servicios / Búsqueda / web? v = 1,0 y q = Hola% 20world y rsz = grande y start = 8

Como se puede ver la primera URL devuelve los ocho primeros resultados, mientras que el segundo devuelve el siguiente ocho. En lugar de verificar estos resultados por separado Me gustaría programación agruparlos en un solo objeto JSON y pasan a través de los resultados como primeros dieciséis.

He intentado esto con un par de objetos JSON muy simples, pero lo que devuelve Google es todavía un poco por encima de mi cabeza, así que estoy esperando por un poco de ayuda con hacer tal cosa.

Por lo que me han dicho que no está en contra de Condiciones de servicio de Google para combinar dos objetos en uno, solo que estos siempre pasan por como dos resultados (que lo harán). Algunos amigos me han apuntado en la dirección de herramientas automatizadas que son capaces de hacer esas cosas, pero estoy todavía encontrar una herramienta de este tipo.

Actualmente estoy trabajando dentro de ASP.NET de manera código C # o VB.NET es grande, pero estoy un tanto independiente del lenguaje por lo que cualquier ayuda en cualquier idioma será muy apreciado.

Puede cualquier persona proporcionar cualquier ayuda y / o asesoramiento en hacer tal cosa?

EDIT:. Estos resultados finalmente se guardarán en una base de datos, por lo que cualquier métodos del servidor sería fantástico, incluso si esto significa ponerlos directamente en una mesa para hacer frente a más tarde

¿Fue útil?

Solución

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

Esto se parece mucho a un código de Elliot, pero es un poco más seguro en algunas condiciones. No es la adición de una función al objeto, lo que podría conducir a algunos problemas de sintaxis, cuando se utilizan en un marco como Extjs o jQuery. Yo tenía el problema de que me dio problemas en la sintaxis cuando se utiliza en un detector de eventos. Sin embargo, los créditos van a Elliot, que hizo el trabajo.

Utilice esta de la siguiente manera:

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}

Gracias Elliot

Otros consejos

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}

Además, si usted realmente quiere hacer la manipulación resultados de página de servidor, este artículo parece dar un tutorial bastante razonable del proceso.

En lugar de fusionar los dos resultados juntos, decidí analizar ellos, a continuación, vincular los dos juntos. Al final no había realmente ninguna necesidad de fusionar los dos juntos cuando podrían ser unidos fácilmente dentro de una base de datos.

Si usted está hasta una solución del lado del cliente (JavaScript en realidad) lo que en tratar la función de "unir" He escrito: http://code.google.com/p/av-jslib/source/browse/js/aV.ext.object. JS # 36

Con Jquery que podría hacer esto!

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

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

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

No estoy seguro de cómo le gustaría combinar estas cosas por completo, teniendo en cuenta que hay una gran cantidad de datos adicionales en cada aparte de los propios resultados, pero si lo que desea es una matriz de JavaScript que contiene todos los 16 resultados, esto debería funcionar. ..

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

Para que sea más limpio, se puede añadir la función merge al objeto JSON. Esta es la solución de Johan van de Merwe basado en la respuesta de Elliot, agrega al objeto real 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top