JSON-Objekt dynamisch über JavaScript erstellen (ohne präzise Zeichenfolgen)

130

Ich habe diese JSON-Daten:

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

Angenommen, ich weiß nicht, wie viele Spalten und Zeilen von Mitarbeitern ich habe. Wie erstelle ich dieses Objekt in JavaScript (ohne präzise Zeichenfolgen)? Angenommen, ich erhalte jede Zeile in der Methode "onGeneratedRow" und muss jede Spalte (Vorname, Nachname) in die Klammern '{}' verschieben.

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
quelle
1
Was ist columnsResult? Was ist metadata?
Georg
1
Diese Frage ist für mich derzeit nicht sinnvoll. Können Sie näher erläutern, woher Ihre Daten stammen und in welchem ​​Format. Fügen Sie nur vorhandene Daten hinzu oder erstellen Sie alles von Grund auf neu. Vielleicht können Sie eine jsfiddle erstellen, um zu demonstrieren, welches Problem Sie haben. Ist Ihre Frage wirklich nur, wie Sie auf Daten innerhalb eines Arrays / oder Javascript-Objekts zugreifen können? Lassen Sie
uns
2
Angenommen, "columnName" ist "firstName" und "column.value" ist der Wert (zum Beispiel: "John"). Ich muss nur wissen, wie man sie dynamisch in die Klammern ('{}')
schiebt
1
Was passiert, wenn Sie den angezeigten Code ausführen?
nnnnnn
@ohadinho es ist unklar, was ist Ihre Eingabedaten strucuture (json)columnsResult
Kamil Kiełczewski

Antworten:

154

Das brauchen Sie!

function onGeneratedRow(columnsResult)
{
    var jsonData = {};
    columnsResult.forEach(function(column) 
    {
        var columnName = column.metadata.colName;
        jsonData[columnName] = column.value;
    });
    viewData.employees.push(jsonData);
 }
Waqar Alamgir
quelle
Woher wusstest du, dass das OP die Zeilen nicht mit ´rowNum´ zählen muss?
Xotic750
1
Push braucht keine Zeilennummer
Waqar Alamgir
Da die JSON-Generierung nicht gezählt werden muss, können Sie immer .length verwenden, um Zeilen abzurufen.
Waqar Alamgir
5
Ich habe nie gesagt, dass die JSON-Generation dies tut. Es war eher so, dass Sie sagten "Das ist, was Sie brauchen!", Aber ich wollte wissen, woher Sie wussten, dass die Zählung vom OP nicht benötigt wurde, oder haben Sie einfach angenommen? Ihre Antwort generiert übrigens kein JSON.
Xotic750
1
@ WaqarAlamgir - genau das brauchte ich in diesem Moment. Prost!
Bob.mazzo
96

Vielleicht helfen Ihnen diese Informationen.

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

Dieses Thema, insbesondere die Antwort von Xotic750, war für mich sehr hilfreich. Ich wollte eine JSON-Variable generieren, um sie mit Ajax an ein PHP-Skript zu übergeben. Meine Werte wurden in zwei Arrays gespeichert, und ich wollte sie im JSON-Format. Dies ist ein allgemeines Beispiel:

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

Das Ergebnis im Konsolenprotokoll sollte ungefähr so ​​aussehen:

{
   "objArray1": {
        "obj1": 121,
        "obj2": 324,
        "obj3": 42,
        "obj4": 31
   },
   "objArray2": {
        "obj1": 232,
        "obj2": 131,
        "obj3": 443
  }
}
der Schmetterlings-Effekt
quelle
2
Kann ich die Nützlichkeit hervorheben, den Code, den Sie hier einreichen, richtig zu verteilen? Es ist viel schwieriger, ohne Abstand zu lesen.
Kevin Lewis
1
Das hat mir ohne Ende geholfen. Genau das, was ich brauchte.
Derek
-2

JavaScript

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

Ergebnis (JSON)

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