6

ここには、Google Search API によって生成された 2 つの JSON オブジェクトがあります。これらのオブジェクトの 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 は最初の 8 つの結果を返し、2 番目の URL は次の 8 つの結果を返します。これらの結果を個別にチェックする代わりに、プログラムでそれらを 1 つの JSON オブジェクトにマージし、最初の 16 の結果として渡したいと思います。

いくつかの非常に単純な JSON オブジェクトを使用してこれを試みましたが、Google が返すものはまだ頭の少し上にあるので、そのようなことを行う上で少し助けてくれることを望んでいます。

私が聞いた限りでは、2 つのオブジェクトを 1 つにマージすることは Google の利用規約に反するものではありませんが、これらは常に 2 つの結果として処理されます (そうなります)。何人かの友人は、そのようなことを行うことができる自動化ツールの方向性を教えてくれましたが、私はまだそのようなツールを見つけていません.

私は現在、ASP.NET 内で作業しているので、C# または VB.NET コードは優れていますが、私は多少言語に依存しないので、任意の言語でのヘルプは非常に高く評価されます。

そのようなことをする際に誰か助けやアドバイスを提供できますか?

編集:これらの結果は最終的にデータベースに保存されるため、後で処理するためにテーブルに直接配置することを意味する場合でも、サーバー側の方法は素晴らしいでしょう.

4

8 に答える 8

11
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}

ありがとうエリオット

于 2010-08-06T18:58:13.403 に答える
4
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}
于 2010-05-18T05:59:37.547 に答える
1

クライアント側のソリューション(実際にはJavaScript)を使用している場合は、私が作成した「unite」関数を試してみてはどうでしょうか。http ://code.google.com/p/av-jslib/source/browse/js/aV.ext .object.js#36

于 2009-07-29T10:10:33.917 に答える
1

また、本当に結果操作をサーバー側で行いたいのであれば、この記事はかなり合理的なプロセスのウォークスルーを提供しているようです。

于 2009-07-29T09:22:55.210 に答える
1

2 つの結果をマージするのではなく、それらを解析してから、それら 2 つをリンクすることにしました。結局、データベース内で簡単に結合できる場合は、2 つを結合する必要はまったくありませんでした。

于 2010-01-11T16:12:29.807 に答える
1

Jquery を使用すると、これを行うことができます。

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

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

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

于 2010-11-02T16:27:27.530 に答える
0

結果自体とは別に、それぞれに余分なデータがたくさんあることを考えると、これらのものを完全にマージする方法はわかりませんが、16 個の結果すべてを含む JavaScript 配列が必要な場合は、これでうまくいくはずです...

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);
}
于 2009-07-29T09:18:35.763 に答える
0

もっときれいにするために、merge関数を JSON オブジェクトに追加できます。これは、実際の JSON オブジェクトに追加された、Elliot の回答に基づく Johan van de Merwe のソリューションです。

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

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

  return o;
}

json3 = JSON.merge(json1,json2);
于 2011-11-23T03:21:41.600 に答える