itsource

jQuery를 사용하지 않고 node.js에서 JSON 결합 또는 병합

mycopycode 2023. 3. 18. 08:37
반응형

jQuery를 사용하지 않고 node.js에서 JSON 결합 또는 병합

나는 여러 개를 가지고 있다.JSON저것들 처럼

var object1 = {name: "John"};
var object2 = {location: "San Jose"};

그들은 보금자리나 그 비슷한 것이 아니다.기본적으로 다른 분야입니다.나는 그것들을 하나로 묶어야 한다.JSON다음과 같이 node.displaces에 저장됩니다.

{name: "John", location: "San Jose"}

는 jQuery를 잘 사용할 수 있습니다.다음은 브라우저의 작업 예를 제시하겠습니다.

http://jsfiddle.net/qhoc/agp54/

그러나 node.js에서 이 작업을 수행할 경우 jQuery를 로드하고 싶지 않습니다(사용량이 조금 많고 node.js의 jQueryWindows 머신에서 작동하지 않습니다).

그럼 이런 걸 할 수 있는 간단한 방법이 있을까요?$.extend()jQuery 없이요?

Object.assign()을 사용해야 합니다.

이렇게 단순한 얄팍한 병합 사용 사례를 위해 바퀴를 재창조할 필요가 없습니다.

Object.assign() 메서드는 하나 이상의 소스 개체에서 대상 개체로 열거 가능한 모든 자체 속성 값을 복사하기 위해 사용됩니다.대상 개체를 반환합니다.

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj);       // { a: 1, b: 2, c: 3 }
console.log(o1);        // { a: 1, b: 2, c: 3 }, target object itself is changed
console.log(obj === o1) // true

Node.js 직원들도 그렇게 말합니다.

_extend내부 노드 외부에서 사용하는 것은 의도되지 않았습니다.JS 모듈어쨌든 커뮤니티가 찾아서 사용했어요.권장되지 않으므로 새 코드에서 사용하면 안 됩니다.JavaScript에는 다음과 같은 기능이 내장되어 있습니다.Object.assign.


업데이트:

분산 연산자를 사용할 수 있습니다.

버전 8.6 이후 Node.js에서 기본적으로 확산 연산자를 사용할 수 있습니다.다음 예:

let o1 = { a: 1 };
let o2 = { b: 2 };
let obj = { ...o1, ...o2 }; // { a: 1, b: 2 }

Object.assign그래도 잘 먹히긴 해요


**PS1**: 실제로 **deep merge* (내부 오브젝트 데이터가 재귀적으로 병합됨)에 관심이 있다면 [deepmerge][4], [assign-deep][5] 또는 [lodash.merge][6]와 같은 패키지를 사용할 수 있습니다. **PS2*: **Object.assign은 Node.js*의 0.X 버전에서는 동작하지 않습니다.이러한 버전 중 하나를 사용하고 있는 경우(_you really not now_), require("util")를 사용할 수 있습니다.위의 Node.js 링크에 표시된 바와 같이 자세한 내용은 [http://https://stackoverflow.com/a/22286375/36272)]를 참조하십시오.

노드 버전 > = 4를 사용하는 경우Object.assign()(리카르도 놀드의 답변을 참조).

Node 0.x 를 사용하고 있는 경우는, 빌트인 유틸리티가 있습니다._filename:

var extend = require('util')._extend
var o = extend({}, {name: "John"});
extend(o,  {location: "San Jose"});

상세 복사는 하지 않고 한 번에 두 개의 인수만 허용하지만 기본적으로 포함되어 있습니다.노드 내 오브젝트 복제에 관한 질문에서 이 내용을 확인했습니다.https://stackoverflow.com/a/15040626

"개인" 메서드를 사용하는 데 관심이 있는 경우 언제든지 프록시를 사용할 수 있습니다.

// myutil.js
exports.extend = require('util')._extend;

그것이 없어지면, 독자적인 실장으로 대체해 주세요.이것은, (대략) 고객의 실장치는 다음과 같습니다.

exports.extend = function(origin, add) {
    if (!add || (typeof add !== 'object' && add !== null)){
        return origin;
    }

    var keys = Object.keys(add);
    var i = keys.length;
    while(i--){
        origin[keys[i]] = add[keys[i]];
    }
    return origin;
};

언더스코어는 제임스가 말한 것처럼 이를 실현하는 가장 쉽고 빠른 방법입니다.

다음은 밑줄을 사용한 예입니다.

var _ = require('underscore'), // npm install underscore to install
  object1 = {name: "John"},
  object2 = {location: "San Jose"};

var target = _.extend(object1, object2);

object 1은 object 2의 속성을 가져와 반환되어 타겟에 할당됩니다.object1이 변경되어도 되는지 여부에 따라 다음과 같이 할 수도 있습니다.

var target = {};
_.extend(target, object1, object2);

정상적인 루프?

function extend(target) {
    var sources = [].slice.call(arguments, 1);
    sources.forEach(function (source) {
        for (var prop in source) {
            target[prop] = source[prop];
        }
    });
    return target;
}

var object3 = extend({}, object1, object2);

그게 기본 출발점이에요. 것 요.hasOwnProperty체크 또는 로직을 추가하여 여러 소스 객체가 동일한 식별자를 가진 속성을 갖는 경우를 처리합니다.

여기 작업 가 있습니다.

주의: JSON이라고 하는 것은 실제로는 정상적인 JavaScript 객체입니다.JSON은 JavaScript와 구문을 공유하는 단순한 텍스트 형식입니다.

병합을 사용합니다.

$ npm install merge

샘플 코드:

var merge = require('merge'), // npm install -g merge
    original, cloned;

console.log(

    merge({ one: 'hello' }, { two: 'world' })

); // {"one": "hello", "two": "world"}

original = { x: { y: 1 } };

cloned = merge(true, original);

cloned.x.y++;

console.log(original.x.y, cloned.x.y); // 1, 2

이 스레드는 너무 오래된 것 같습니다만, 로그 목적으로 여기에 답변을 넣었습니다.

위의 코멘트 중 하나에서 의존관계 목록에 '접속' 라이브러리가 있는 프로젝트에서 '익스프레스'를 사용하고 싶다고 말씀하셨습니다.실제로 'connect.utils' 라이브러리에는 이 기능을 수행하는 'merge' 메서드가 포함되어 있습니다.새로운 서드파티 라이브러리를 추가하지 않고 서드파티 구현을 사용할 수 있습니다.

다음은 JSON을 병합하는 간단한 솔루션입니다.나는 다음과 같이 했다.

  • 합니다.JSON.stringify(object).
  • 을 연결하다JSON 문자열에 합니다.+환입니니다다
  • ./}{/g","
  • 결과 문자열을 다시 JSON 개체로 구문 분석합니다.

    var object1 = {name: "John"};
    var object2 = {location: "San Jose"};
    var merged_object = JSON.parse((JSON.stringify(object1) + JSON.stringify(object2)).replace(/}{/g,","))
    

그 결과 병합된 JSON은

{name: "John", location: "San Jose"}

Node.js에서 간단하게 할 수 있는 방법이 있습니다.

var object1 = {name: "John"};
var object2 = {location: "San Jose"};

을 조합하려면 , 「/」를 합니다....

var object1 = {name: "John"};
var object2 = {location: "San Jose"};

var result = {
  ...object1,
  ...object2
}

console.log(result)

이 경량 npm 패키지도 사용할 수 있습니다.

코드 27줄, 1kb이며 재귀를 사용하여 심층 객체 병합을 수행합니다.

var absorb = require('absorb');
var obj1, obj2;

obj1 = { foo: 123, bar: 456 };
obj2 = { bar: 123, key: 'value' }

absorb(obj1, obj2);

console.log(obj1); // Output: { foo: 123, bar: 123, key: 'value' }

또한 복제하거나 소스 개체에 없는 값만 전송하는 데 사용할 수도 있습니다. 이 방법은 제공된 링크에 자세히 설명되어 있습니다.

Object.assign() 메서드를 사용하면 쉽게 할 수 있습니다.

 var object1 = {name: "John"};
 var object2 = {location: "San Jose"};
 var object3 = Object.assign(object1,object2);
 console.log(object3);

현재 object3은 {name: 'John', 위치: 'San Jose'}입니다.

확산 연산자를 사용합니다.버전 8.6 이후 노드에서 지원됩니다.

const object1 = {name: "John"};
const object2 = {location: "San Jose"};

const obj = {...object1, ...object2}

console.log(obj)
//   {
//     "name": "John",
//     "location": "San Jose"
//   }

중첩된 개체 확장 또는 어레이 교체와 같은 특수한 동작이 필요한 경우 Node.js의 확장 기능을 사용할 수 있습니다.

var extendify = require('extendify');

_.extend = extendify({
    inPlace: false,
    arrays : 'replace',
    isDeep: true
});

obj1 = {
    a:{
        arr: [1,2]
    },
    b: 4
};

obj2 = {
    a:{
        arr: [3]
    }
};

res = _.extend(obj1,obj2);
console.log(JSON.stringify(res)); //{'a':{'arr':[3]},'b':4}

Lodash는 이러한 종류의 유틸리티를 위한 또 다른 강력한 도구 벨트 옵션입니다.참조: (재귀적)

var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
}; 
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } 

다음 코드는 중첩된 개체가 있는 두 개의 JSON 개체를 병합하는 데 도움이 됩니다.

function mergeJSON(source1,source2){
    /*
     * Properties from the Souce1 object will be copied to Source2 Object.
     * Note: This method will return a new merged object, Source1 and Source2 original values will not be replaced.
     * */
    var mergedJSON = Object.create(source2);// Copying Source2 to a new Object

    for (var attrname in source1) {
        if(mergedJSON.hasOwnProperty(attrname)) {
          if ( source1[attrname]!=null && source1[attrname].constructor==Object ) {
              /*
               * Recursive call if the property is an object,
               * Iterate the object and set all properties of the inner object.
              */
              mergedJSON[attrname] = zrd3.utils.mergeJSON(source1[attrname], mergedJSON[attrname]);
          } 

        } else {//else copy the property from source1
            mergedJSON[attrname] = source1[attrname];

        }
      }

      return mergedJSON;
}

Lodash 사용 가능

const _ = require('lodash');

let firstObject = {'email' : 'email@email.com};
let secondObject = { 'name' : { 'first':message.firstName } };
_.merge(firstObject, secondObject)

타깃을 변경하지 않기 위한 올바른 솔루션 접근법:

function extend(){
  let sources = [].slice.call(arguments, 0), result = {};
  sources.forEach(function (source) {
    for (let prop in source) {
      result[prop] = source[prop];
    }
  });
  return result;
}

다음과 같은 변수를 변경하지 않고 인라인으로 실행할 수 있습니다.

let obj1 = { name: 'John' };
let obj2 = { surname: 'Smith' };
let obj = Object.assign({}, obj1, obj2); // { name: 'John', surname: 'Smith' }

let let 렛츠고object1 ★★★★★★★★★★★★★★★★★」object2JSON이 되다

var object1 = [{"name": "John"}];
var object2 = [{"location": "San Jose"}];

object1.push(object2);

것이다.object2object1:

[{"name":"John"},{"location":"San Jose"}]

언급URL : https://stackoverflow.com/questions/14974864/combine-or-merge-json-on-node-js-without-jquery

반응형