Pergunta

Eu tenho dois objetos JSON aqui, gerados através da API de pesquisa do Google. Os URLs desses objetos podem ser encontrados abaixo.

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

Como você pode ver, o primeiro URL retorna os oito primeiros resultados, enquanto o segundo retorna nos oito próximos. Em vez de verificar esses resultados separadamente, gostaria de programaticamente Merja -os em um objeto JSON e passe -os como os dezesseis resultados.

Eu tentei isso com alguns objetos JSON extremamente simples, mas o que o Google retorna ainda está um pouco acima da minha cabeça, então espero um pouco de ajuda para fazer isso.

Tanto quanto me disseram, não é contra os termos de serviço do Google para mesclar dois objetos em um, apenas que eles sempre passam como dois resultados (o que farão). Alguns amigos me apontaram na direção de ferramentas automatizadas capazes de fazer essas coisas, mas ainda estou para encontrar essa ferramenta.

Atualmente, estou trabalhando no ASP.NET SO C# ou VB.NET Código é ótimo, mas sou um pouco independente de idiomas, para que qualquer ajuda em qualquer idioma seja muito apreciada.

Alguém pode fornecer alguma ajuda e/ou conselhos sobre como fazer isso?

EDITAR: Esses resultados acabarão sendo salvos em um banco de dados; portanto, qualquer método do lado do servidor seria fantástico, mesmo que isso signifique colocá-los diretamente em uma mesa para lidar posteriormente.

Foi útil?

Solução

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

Isso se parece muito com o código da Elliot, mas é um pouco mais seguro em algumas condições. Não está adicionando uma função ao objeto, o que pode levar a alguns problemas de sintaxe, quando usado com uma estrutura como extjs ou jQuery. Eu tive o problema de que isso me deu problemas na sintaxe quando usado em um ouvinte. Mas os créditos vão para Elliot, ele fez o trabalho.

Use isto como seguinte:

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}

Obrigado Elliot

Outras dicas

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}

Além disso, se você realmente deseja fazer os resultados do lado do servidor de manipulação, Este artigo parece dar um passo a passo razoável do processo.

Em vez de mesclar os dois resultados, decidi analisá -los e depois vincular esses dois. No final, não havia realmente necessidade de mesclar os dois quando eles poderiam ser facilmente unidos em um banco de dados.

Se você está pronto para uma solução do lado do cliente (JavaScript, na verdade), que tal tentar a função "unite" que escrevi: http://code.google.com/p/av-jslib/source/browse/js/av.ext.object.js#36

Com o jQuery, você poderia fazer isso!

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

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

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

Não tenho certeza de como você fundiria essas coisas completamente, já que há muitos dados extras em cada um, além dos próprios resultados, mas se você deseja apenas uma matriz de JavaScript contendo todos os 16 resultados, isso deve 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 torná -lo mais legal, você pode adicionar o merge função para o objeto JSON. Esta é a solução de Johan van de Merwe com base na resposta de Elliot, adicionada ao objeto JSON real.

// 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top