Динамічно створюйте об'єкт JSON за допомогою JavaScript (Без об'єднання рядків)


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, щоб продемонструвати, яка проблема у вас є. Це ваше питання справді просто, як отримати доступ до даних в масиві / або об’єкті JavaScript? І дозволяє мати чітке уявлення про дані, JSON або Javascript об'єкта: 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);
 }

Звідки ви дізналися, що ОП не потребує підрахунку рядків із „rowNum “?
Xotic750

1
push не потрібен номер рядка
Waqar Alamgir

Оскільки для генерації json не потрібно рахувати, більше ви завжди можете використовувати .length, щоб отримати рядки.
Вакар Аламгір

5
Я ніколи не говорив, що так походить покоління JSON. Більше випадків, коли ви заявляєте "Це те, що вам потрібно!", Але я хотів знати, як ви знали, що ОП не потрібен, або ви просто припускаєте? Ваша відповідь не породжує 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, мені дуже допомогла. Я хотів генерувати змінну json, щоб передати її до сценарію php за допомогою ajax. Мої значення зберігалися у двох масивах, і я хотів їх у форматі 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
Чи можу я підкреслити корисність у правильному розміщенні коду, який ви подаєте тут? Набагато складніше читати без пробілів.
Кевін Льюїс

1
Це не допомогло мені закінчитись. Саме те, що я вимагав.
Дерек

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.