Buat objek JSON secara dinamis melalui JavaScript (Tanpa string concate)

130

Saya punya data JSON ini:

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

Misalkan saya tidak tahu berapa banyak kolom dan baris karyawan yang saya miliki, bagaimana cara membuat objek ini dalam JavaScript (Tanpa string concate)? Asumsikan bahwa saya mendapatkan setiap baris dalam metode "onGeneratedRow", dan saya perlu mendorong setiap kolom (firstName, lastName) ke tanda kurung '{}.

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
sumber
1
Apa columnsResult? Apa metadata?
georg
1
Pertanyaan ini tidak masuk akal bagi saya saat ini, dapatkah Anda menjelaskan lebih lanjut, dari mana data Anda berasal dan dalam format apa. Apakah Anda hanya menambahkan data yang ada atau membuat semuanya dari awal. Mungkin Anda dapat membuat jsfiddle untuk mendemonstrasikan masalah yang Anda hadapi. Apakah pertanyaan Anda benar-benar adil, bagaimana cara mengakses data dalam array / atau objek javascript? Dan mari kita perjelas tentang data, JSON atau objek Javascript: stackoverflow.com/questions/8294088/javascript-object-vs-json
Xotic750
2
anggap "columnName" adalah "firstName" dan "column.value" adalah nilainya (misalnya: "John"). Saya hanya perlu tahu bagaimana mendorong mereka secara dinamis ke dalam kurung ('{}')
ohadinho
1
Apa yang terjadi ketika Anda menjalankan kode yang Anda perlihatkan?
nnnnnn
@ohadinho tidak jelas apa strucuture data input Anda (json)columnsResult
Kamil Kiełczewski

Jawaban:

154

Ini yang kamu butuhkan!

function onGeneratedRow(columnsResult)
{
    var jsonData = {};
    columnsResult.forEach(function(column) 
    {
        var columnName = column.metadata.colName;
        jsonData[columnName] = column.value;
    });
    viewData.employees.push(jsonData);
 }
Waqar Alamgir
sumber
Bagaimana Anda tahu bahwa OP tidak perlu menghitung baris dengan "rowNum "?
Xotic750
1
push tidak perlu nomor baris
Waqar Alamgir
karena generasi json tidak perlu dihitung, semakin Anda selalu dapat menggunakan .length untuk mendapatkan baris.
Waqar Alamgir
5
Saya tidak pernah mengatakan bahwa generasi JSON melakukannya. Lebih tepatnya Anda menyatakan "Ini yang Anda butuhkan!", Tetapi saya ingin tahu bagaimana Anda tahu bahwa penghitungan tidak diperlukan oleh OP, atau apakah Anda hanya berasumsi? Jawaban Anda tidak menghasilkan JSON btw.
Xotic750
1
@WaqarAlamgir - itulah yang saya butuhkan saat ini. Bersulang!
bob.mazzo
96

Mungkin informasi ini akan membantu Anda.

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
sumber
10

Topik ini, terutama jawaban Xotic750 sangat membantu saya. Saya ingin menghasilkan variabel json untuk meneruskannya ke skrip php menggunakan ajax. Nilai-nilai saya disimpan dalam dua array, dan saya ingin mereka dalam format json. Ini adalah contoh umum:

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

Hasilnya di konsol Log harus seperti ini:

{
   "objArray1": {
        "obj1": 121,
        "obj2": 324,
        "obj3": 42,
        "obj4": 31
   },
   "objArray2": {
        "obj1": 232,
        "obj2": 131,
        "obj3": 443
  }
}
efek_butterfly_efektif
sumber
2
Bisakah saya menekankan kegunaan spasi yang tepat dengan kode yang Anda kirim di sini? Jauh lebih sulit dibaca tanpa spasi.
Kevin Lewis
1
Ini membantu saya tanpa akhir. Persis apa yang saya butuhkan.
Derek
-1

JavaScript

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

Hasil (JSON)

{
   "id": "c001",
   "name": "Hello Test"
}
Ishan Lakshitha
sumber