2013-05-12 15 views
83

che ho questi dati JSON:Crea oggetto JSON dinamicamente tramite JavaScript (senza stringhe concate)

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

Supponiamo che io non so il numero di colonne e righe dei dipendenti che ho, come faccio a creare questo oggetto in JavaScript (senza stringhe concate)? Supponiamo che ottenga ogni riga nel metodo "onGeneratedRow", e ho bisogno di spingere ogni colonna (firstName, lastName) alle parentesi "{}".

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

cosa è 'columnsResult'? Cosa sono i "metadati"? – georg

+0

Al momento non ho più senso per me queste domande, puoi spiegare ulteriormente, da dove provengono i tuoi dati e in quale formato. Stai semplicemente aggiungendo ai dati esistenti o creando tutto da zero. Forse puoi creare un jsfiddle per dimostrare quale sia il problema che stai riscontrando. La tua domanda è davvero solo, come accedere ai dati all'interno di un array/o di un oggetto javascript? E sia chiaro riguardo ai dati, oggetti JSON o Javascript: http://stackoverflow.com/questions/8294088/javascript-object-vs-json – Xotic750

+1

assume "columnName" è "firstName" e "column.value" è il valore (ad esempio: "John"). Ho solo bisogno di sapere come spingerli dinamicamente tra parentesi ('{}') – ohadinho

risposta

103

Questo è quello che ti serve!

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

Come sapevi che l'OP non ha bisogno di contare le righe con'rowNum'? – Xotic750

+1

push non ha bisogno del numero di riga –

+3

Non l'ho mai detto. – Xotic750

54

Forse questa informazione ti aiuterà.

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

3

Questo argomento, in particolare la risposta di Xotic750 è stato molto utile per me. Volevo generare una variabile json per passarla a uno script php usando ajax. I miei valori sono stati memorizzati in due array e li volevo in formato json. Questo è un esempio generico:

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

Il risultato nella console registro dovrebbe essere qualcosa di simile:

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

Posso sottolineare l'utilità nel spaziatura corretta del codice inviato qui? È molto più difficile leggere senza spaziatura. –

+0

Questo mi ha aiutato senza fine. Esattamente quello che ho richiesto. – Derek

Problemi correlati