두 개의 JSON 객체를 프로그래밍 방식으로 병합하십시오
-
20-09-2019 - |
문제
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}
결과 자체와는 별도로 각각의 추가 데이터가 많이 있다는 점을 감안할 때 이러한 것들을 어떻게 완전히 병합 할 것인지 잘 모르겠지만 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);