Программно объединить два объекта JSON

У меня есть два объекта JSON здесь, сгенерированные через API поиска Google. URL-адреса этих объектов можно найти ниже.

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

Как вы можете видеть, первый URL возвращает первые восемь результатов, в то время как второй возвращает следующие восемь. Вместо проверяя эти результаты отдельно, я хотел бы программно объедините их в один объект JSON и передайте их как первые шестнадцать результатов.

Я попытался это сделать с помощью нескольких чрезвычайно простых объектов JSON, но то, что Google возвращает, все еще немного выше моей головы, поэтому я надеюсь на небольшую помощь в этом.

насколько мне сказали, это не противоречит условиям обслуживания Google, чтобы объединить два объекта в один, только что эти всегда проходите через два результата (которые они будут). Некоторые друзья указали мне на автоматизированные инструменты, которые способны делать такие вещи, но я еще не нашел такой инструмент.

в настоящее время я работаю в ASP.NET Итак, C# или VB.NET код отличный, но я несколько независим от языка, поэтому любая помощь на любом языке будет очень признательна.

может ли кто-нибудь оказать какую-либо помощь и/или совет по этому поводу?

EDIT: Эти результаты в конечном итоге будут сохранены в базе данных, поэтому любые серверные методы будут фантастическими, даже если это означает, что они будут помещены прямо в таблицу для работы позже.

8 ответов


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

Это очень похоже на код от Elliot, но в некоторых условиях немного безопаснее. Он не добавляет функцию к объекту, что может привести к некоторым синтаксическим проблемам, при использовании в рамках, таких как Extjs или jQuery. У меня была проблема, что это дало мне проблемы в синтаксисе при использовании в прослушивателе событий. Но кредиты идут Эллиоту, он сделал свою работу.

использовать это следующим образом:

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}

спасибо Эллиот


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}

кроме того, если вы действительно хотите сделать результаты манипуляции на стороне сервера,в этой статье Кажется, дает довольно разумное прохождение процесса.


вместо того, чтобы объединить два результата вместе, я просто решил разобрать их, а затем связать эти два вместе. В конце концов, не было необходимости объединять их вместе, когда их можно было легко объединить в базе данных.


Если вы до решения на стороне клиента (JavaScript на самом деле) , как насчет попытки функции "unite", которую я написал:http://code.google.com/p/av-jslib/source/browse/js/aV.ext.object.js#36


С Jquery вы можете это сделать!

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

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

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


Я не уверен, как вы полностью объедините эти вещи, учитывая, что в каждом есть много дополнительных данных, кроме самих результатов, но если вы просто хотите массив JavaScript, содержащий все 16 результатов, это должно работать...

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

чтобы сделать его более аккуратным, можно добавить merge функция для объекта JSON. Это решение Йохана Ван де Мерве, основанное на ответе Эллиота, добавленном к фактическому объекту 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);