문제

Google 검색 API를 통해 생성 된 두 개의 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 개의 결과를 반환하는 반면 두 번째 URL은 다음 8을 반환합니다. 이 결과를 별도로 확인하는 대신 원하는 것입니다 프로그래밍 방식으로 그것들을 하나의 JSON 객체로 병합하여 처음 16 일 결과로 통과하십시오.

나는 매우 간단한 JSON 객체 몇 개로 이것을 시도했지만 Google Returns는 여전히 머리 위로 약간 높아져서 그런 일을하는 데 약간의 도움을 받기를 바라고 있습니다.

내가 들었던 한, 두 개의 객체를 하나로 병합하는 것은 Google의 서비스 약관에 위배되는 것이 아니며, 항상 두 가지 결과 (두 가지 결과)로 겪습니다. 일부 친구들은 그런 일을 할 수있는 자동화 된 도구의 방향을 지적했지만 아직 그런 도구를 찾지 못했습니다.

현재 ASP.NET 내에서 일하고 있으므로 C# 또는 VB.NET 코드는 훌륭하지만 언어 독립적이므로 모든 언어에 대한 도움이 크게 높이 평가됩니다.

누구든지 그런 일을하는 데 도움이되고/또는 조언을 제공 할 수 있습니까?

편집하다: 이 결과는 결국 데이터베이스에 저장되므로 나중에 다루기 위해 테이블에 바로 넣는 것을 의미하더라도 서버 측 메소드는 환상적입니다.

도움이 되었습니까?

해결책

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

이것은 엘리엇의 코드와 비슷해 보이지만 일부 조건에서는 약간 더 안전합니다. 객체에 함수를 추가하지 않으므로 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/

결과 자체와는 별도로 각각의 추가 데이터가 많이 있다는 점을 감안할 때 이러한 것들을 어떻게 완전히 병합 할 것인지 잘 모르겠지만 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);
}

더 깔끔하게 만들기 위해 merge JSON 객체에 기능합니다. 이것은 Elliot의 답변을 기반으로 한 Johan Van de Merwe의 솔루션이며 실제 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top