JavaScript aracılığıyla dinamik olarak JSON nesnesi oluşturun (bitişik dizeler olmadan)


130

Bu JSON verisine sahibim:

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

Diyelim ki kaç tane çalışanım ve sütunum olduğunu bilmiyorum, bu nesneyi JavaScript'te nasıl oluşturabilirim (Kesikli dizeler olmadan)? "OnGeneratedRow" yöntemindeki her satırı aldığımı ve her sütunu (firstName, lastName) '{}' parantezine itmem gerektiğini varsayalım.

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
Nedir columnsResult? Nedir metadata?
georg

1
Bu soru şu anda bana mantıklı gelmiyor, verilerinizin nereden ve hangi formatta geldiğini biraz daha açıklayabilir misiniz? Sadece mevcut verilere mi ekliyorsunuz yoksa hepsini sıfırdan mı oluşturuyorsunuz? Belki de yaşadığınız sorunun ne olduğunu göstermek için bir jsfiddle oluşturabilirsiniz. Sorunuz gerçekten sadece, bir dizi / veya javascript nesnesi içindeki verilere nasıl erişilir? Ve veriler, JSON veya Javascript nesnesi hakkında net
olalım

2
"columnName" in "firstName" ve "column.value" değerinin (örneğin: "John") olduğunu varsayın. Onları dinamik olarak parantez içine nasıl iteceğimi bilmem gerekiyor ('{}')
ohadinho

1
Gösterdiğiniz kodu çalıştırdığınızda ne olur?
nnnnnn

@ohadinho, giriş veri yapınızın (json) ne olduğu belli değilcolumnsResult
Kamil Kiełczewski

Yanıtlar:


154

İhtiyacın olan şey bu!

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

OP'nin satırları "rowNum "ile saymasına gerek olmadığını nasıl anladınız?
Xotic750

1
push satır numarasına ihtiyaç duymaz
Waqar Alamgir

json oluşturma sayım gerektirmediğinden, satırları almak için her zaman .length kullanabilirsiniz.
Vakar Alamgir

5
JSON neslinin öyle olduğunu hiç söylemedim. Daha çok "İhtiyacınız olan şey bu!" Demeniz söz konusuydu, ancak bu sayının OP tarafından gerekli olmadığını nasıl bildiğinizi bilmek istedim, yoksa sadece farz mı ettiniz? Cevabınız JSON btw oluşturmuyor.
Xotic750

1
@WaqarAlamgir - tam da şu anda ihtiyacım olan şey buydu. Şerefe!
bob.mazzo

96

Belki bu bilgi size yardımcı olacaktır.

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

Bu konu, özellikle Xotic750'nin cevabı bana çok yardımcı oldu. Ajax kullanarak bir php betiğine geçirmek için bir json değişkeni oluşturmak istedim. Değerlerim iki dizi halinde saklandı ve onları json formatında istedim. Bu genel bir örnektir:

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

Konsol Günlüğündeki sonuç şu şekilde olmalıdır:

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

2
Buraya gönderdiğiniz kodun doğru aralıklarla yerleştirilmesinin faydasını vurgulayabilir miyim? Boşluk bırakmadan okumak çok daha zordur.
Kevin Lewis

1
Bu bana son vermedi. Tam olarak istediğim şey.
Derek

-1

JavaScript

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

Sonuç (JSON)

{
   "id": "c001",
   "name": "Hello Test"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.