문자열을 연결하지 않고 JavaScript를 통해 동적으로 JSON 객체 생성


130

이 JSON 데이터가 있습니다.

{
    "employees": [
        {
            "firstName": "John",
            "lastName": "Doe"
        },
        {
            "firstName": "Anna",
            "lastName": "Smith"
        },
        {
            "firstName": "Peter",
            "lastName": "Jones"
        }
    ]
}

직원의 열과 행 수를 모르는 경우 문자열로 연결하지 않고 JavaScript로이 개체를 작성하는 방법은 무엇입니까? "onGeneratedRow"메소드에서 각 행을 가져오고 각 열 (firstName, lastName)을 '{}'괄호로 푸시해야한다고 가정하십시오.

var viewData = { 
    employees : [] 
};

var rowNum = -1; 

function onGeneratedRow(columnsResult)
{
    rowNum = rowNum + 1;
    viewData.employees.push({});    
    columnsResult.forEach(function(column) {                  
    var columnName = column.metadata.colName;
    viewData.employees[rowNum][columnName] = column.value;  });
}

1
무엇입니까 columnsResult? 무엇입니까 metadata?
georg

1
이 질문은 현재 이해가되지 않습니다. 데이터의 출처와 형식을 자세히 설명 할 수 있습니까? 기존 데이터에 추가하거나 모든 데이터를 처음부터 새로 작성하고 있습니까? 어쩌면 jsfiddle을 만들어서 문제가 무엇인지 보여줄 수 있습니다. 질문은 실제로 배열 / 또는 자바 스크립트 객체 내의 데이터에 액세스하는 방법입니까? 그리고 데이터, JSON 또는 자바 스크립트 객체에 대해 명확하게 할 수 있습니다 : stackoverflow.com/questions/8294088/javascript-object-vs-json
Xotic750

2
"columnName"이 "firstName"이고 "column.value"가 값 (예 : "John")이라고 가정하십시오. 난 그냥 대괄호 ( '{}')에 동적으로 밀어 넣는 방법을 알아야합니다
ohadinho

1
표시된 코드를 실행하면 어떻게됩니까?
nnnnnn

@ohadinho 그것은 입력 데이터 구조 (json)가 무엇인지 확실하지 않습니다columnsResult
Kamil Kiełczewski

답변:


154

이것이 당신이 필요로하는 것입니다!

function onGeneratedRow(columnsResult)
{
    var jsonData = {};
    columnsResult.forEach(function(column) 
    {
        var columnName = column.metadata.colName;
        jsonData[columnName] = column.value;
    });
    viewData.employees.push(jsonData);
 }

OP가 'rowNum'으로 행을 계산할 필요가 없다는 것을 어떻게 알았습니까?
Xotic750

1
푸시는 행 번호가 필요하지 않습니다
Waqar Alamgir

json 생성에는 개수가 필요하지 않기 때문에 항상 .length를 사용하여 행을 가져올 수 있습니다.
Waqar Alamgir

5
나는 JSON 생성이 그렇게 말하지 않았다. "이것이 필요한 것입니다!"라고 말하는 것이 더 많았지 만 OP가 계산이 필요하지 않다는 것을 어떻게 알았는지 알고 싶습니까? 귀하의 답변은 JSON btw를 생성하지 않습니다.
Xotic750

1
@WaqarAlamgir-이것이 바로 지금 필요한 것입니다. 건배!
bob.mazzo

96

아마도이 정보가 도움이 될 것입니다.

var sitePersonel = {};
var employees = []
sitePersonel.employees = employees;
console.log(sitePersonel);

var firstName = "John";
var lastName = "Smith";
var employee = {
  "firstName": firstName,
  "lastName": lastName
}
sitePersonel.employees.push(employee);
console.log(sitePersonel);

var manager = "Jane Doe";
sitePersonel.employees[0].manager = manager;
console.log(sitePersonel);

console.log(JSON.stringify(sitePersonel));


10

이 주제, 특히 Xotic750의 답변은 저에게 매우 도움이되었습니다. 아약스를 사용하여 PHP 스크립트에 전달하기 위해 json 변수를 생성하고 싶었습니다. 내 값은 두 개의 배열에 저장되었으며 json 형식으로 원했습니다. 다음은 일반적인 예입니다.

valArray1 = [121, 324, 42, 31];
valArray2 = [232, 131, 443];
myJson = {objArray1: {}, objArray2: {}};
for (var k = 1; k < valArray1.length; k++) {
    var objName = 'obj' + k;
    var objValue = valArray1[k];
    myJson.objArray1[objName] = objValue;
}
for (var k = 1; k < valArray2.length; k++) {
    var objName = 'obj' + k;
    var objValue = valArray2[k];
    myJson.objArray2[objName] = objValue;
}
console.log(JSON.stringify(myJson));

콘솔 로그의 결과는 다음과 같아야합니다.

{
   "objArray1": {
        "obj1": 121,
        "obj2": 324,
        "obj3": 42,
        "obj4": 31
   },
   "objArray2": {
        "obj1": 232,
        "obj2": 131,
        "obj3": 443
  }
}

2
여기에 제출 한 코드의 간격을 적절하게 유지하는 데 유용성을 강조 할 수 있습니까? 간격없이 읽는 것이 훨씬 어렵습니다.
Kevin Lewis

1
이것은 나를 끝내는 데 도움이되었습니다. 정확히 내가 필요한 것.
데릭

-1

자바 스크립트

var myObj = {
   id: "c001",
   name: "Hello Test"
}

결과 (JSON)

{
   "id": "c001",
   "name": "Hello Test"
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.