Nice programing

JSON 개체에 변수 이름 값 쌍을 동적으로 추가

nicepro 2020. 12. 13. 11:04
반응형

JSON 개체에 변수 이름 값 쌍을 동적으로 추가


나는 다음과 같은 IP로 가득 찬 json 객체를 가지고 있습니다.

var ips = {}

그런 다음이 객체에 ip 객체를 추가합니다.

ips[ipID] = {}

그런 다음 각 IP에 동적 / 변수 이름 값 쌍을 추가해야하므로 다음과 같은 코드를 사용하고 있습니다.

var name; var value; var temp = {};
tmp[name] = value

내 질문은 내 결과가 다음과 같이 나오도록 이러한 이름 값 쌍 / tmp를 내 ipID 객체에 어떻게 추가 할 수 있습니까?

ipID = { name : value, anotherName : anotherValue }

그것은 JSON이 아닙니다. Javascript 객체 일 뿐이며 JSON과는 전혀 관련이 없습니다.

대괄호를 사용하여 속성을 동적으로 설정할 수 있습니다. 예:

var obj = {};
obj['name'] = value;
obj['anotherName'] = anotherValue;

이것은 다음과 같은 객체 리터럴로 객체를 생성하는 것과 똑같습니다.

var obj = { name : value, anotherName : anotherValue };

ips컬렉션에 개체를 이미 추가 한 경우 한 쌍의 대괄호를 사용하여 컬렉션의 개체에 액세스하고 다른 쌍을 사용하여 개체의 속성에 액세스합니다.

ips[ipId] = {};
ips[ipId]['name'] = value;
ips[ipId]['anotherName'] = anotherValue;

공지 사항 위의 코드와 유사하지만, 그냥 사용하고 있는지 ips[ipId]대신 obj.

컬렉션에서 개체에 대한 참조를 다시 가져 와서 컬렉션에 남아있는 동안 개체에 액세스하는 데 사용할 수도 있습니다.

ips[ipId] = {};
var obj = ips[ipId];
obj['name'] = value;
obj['anotherName'] = anotherValue;

문자열 변수를 사용하여 속성 이름을 지정할 수 있습니다.

var name = 'name';
obj[name] = value;
name = 'anotherName';
obj[name] = anotherValue;

속성을 식별하는 것은 변수 (문자열)의 값이므로 obj[name]위 코드에서 두 속성을 모두 사용하는 동안 액세스 할 때 액세스 할 속성을 결정하는 것은 변수의 문자열입니다.


ECMAScript 6을 사용하면 더 나은 방법이 있습니다.

객체 속성 정의에서 계산 된 속성 이름사용할 수 있습니다 . 예를 들면 다음과 같습니다.

var name1 = 'John'; 
var value1 = '42'; 
var name2 = 'Sarah'; 
var value2 = '35';

var ipID = { 
             [name1] : value1, 
             [name2] : value2 
           }

이것은 속성 이름에 대한 변수가있는 다음과 동일합니다.

var ipID = { 
             John: '42', 
             Sarah: '35' 
           }

자바 스크립트 객체를 사용할 때 "점 표기법"을 사용하여 항목을 추가 할 수도 있습니다 ( JSLint가 선호 함 ).

var myArray = { name : "john" };
//will initiate a key-value array with one item "name" and the value "john"
myArray.lastName = "smith";
//will add a key named lastName with the value "smith"
//Object {name: "john", lastName: "smith"}

다음은 Chrome 콘솔에서 테스트 한 스크린 샷입니다.

스크린 샷


"ips"의 각 항목이 여러 이름 값 쌍을 가질 수 있다고 가정하고 있으므로 중첩됩니다. 이 데이터 구조는 다음과 같이 얻을 수 있습니다.

var ips = {}

function addIpId(ipID, name, value) {
    if (!ips[ipID]) ip[ipID] = {};
    var entries = ip[ipID];
    // you could add a check to ensure the name-value par's not already defined here
    var entries[name] = value;
}

자바 스크립트에서.

    var myObject = { "name" : "john" };
    // { "name" : "john" };
    myObject.gender = "male";
    // { "name" : "john", "gender":"male"};

다른 답변이 제안한 내용에서 이것이 도움이 될 것이라고 생각합니다.

var object = ips[ipId];
var name = "Joe";
var anothername = "Fred";
var value = "Thingy";
var anothervalue = "Fingy";
object[name] = value;
object[anothername] = anothervalue;

그러나 이것은 테스트되지 않고 다음의 지속적인 반복을 기반으로 한 가정 일뿐입니다.

object["string"] = value;
//object = {string: value}

초기 JSON에 대한 내 이해가 정확하다면 이러한 솔루션 중 하나가 모든 IP ID를 반복하고 각 ID를 새 개체로 할당하는 데 도움이 될 수 있습니다.

// initial JSON
var ips = {ipId1: {}, ipId2: {}};

// Solution1
Object.keys(ips).forEach(function(key) {
  ips[key] = {name: 'value', anotherName: 'another value'};
});

// Solution 2
Object.keys(ips).forEach(function(key) {
  Object.assign(ips[key],{name: 'value', anotherName: 'another value'});
});

확인:

console.log(JSON.stringify(ips, null, 2));

위의 진술은 다음과 같습니다.

{
  "ipId1": {
    "name":"value",
    "anotherName":"another value"
  },
  "ipId2": {
    "name":"value",
    "anotherName":"another value"
  }
}

Lodash _.assign 기능을 사용하여 이를 달성 할 수 있습니다 .

var ipID = {};
_.assign(ipID, {'name': "value"}, {'anotherName': "anotherValue"});
console.log(ipID);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

참고 URL : https://stackoverflow.com/questions/4071499/dynamically-add-variable-name-value-pairs-to-json-object

반응형