Создавать объект 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;  });
}
ohadinho
источник
1
Что есть columnsResult? Что есть metadata?
georg
1
В настоящее время этот вопрос не имеет для меня смысла, не могли бы вы объяснить, откуда берутся ваши данные и в каком формате. Вы просто добавляете существующие данные или создаете их с нуля? Возможно, вы можете создать jsfiddle, чтобы продемонстрировать, в чем проблема. Действительно ли ваш вопрос только в том, как получить доступ к данным в массиве / или объекте javascript? И давайте
проясним
2
предположим, что «columnName» - это «firstName», а «column.value» - это значение (например: «John»). Мне просто нужно знать, как динамически
помещать
1
Что происходит, когда вы запускаете показанный код?
nnnnnn
@ohadinho, неясно, какова ваша структура входных данных (json)columnsResult
Камил Келчевски

Ответы:

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
push не нуждается в номере строки
Вакар Аламгир
поскольку генерация json не требует подсчета, вы всегда можете использовать .length для получения строк.
Вакар Аламгир
5
Я никогда не говорил, что поколение JSON делает. Это был скорее случай, когда вы заявили: «Это то, что вам нужно!», Но я хотел знать, как вы узнали, что счетчик не нужен OP, или вы просто предположили? Кстати, ваш ответ не генерирует JSON.
Xotic750
1
@WaqarAlamgir - это именно то, что мне было нужно в данный момент. Ура!
bob.mazzo
97

Возможно, эта информация вам поможет.

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));

Xotic750
источник
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
Это мне без конца помогло. Именно то, что мне нужно.
Дерек
-1

JavaScript

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

Результат (JSON)

{
   "id": "c001",
   "name": "Hello Test"
}
Ишан Лакшита
источник