2013-05-12 13 views
83

mam te dane JSON:Tworzenie obiektu JSON dynamicznie przez JavaScript (bez strun concate)

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

Przypuśćmy, że nie wiem, ile kolumn i wierszy pracowników mam, jak mam stworzyć ten obiekt w JavaScript (bez ciągów konkludowanych)? Załóżmy, że otrzymuję każdy wiersz w metodzie "onGeneratedRow", i muszę przekazać każdą kolumnę (firstName, lastName) do nawiasów "{}".

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

Co jest 'columnsResult'? Czym są "metadane"? – georg

+0

To pytanie nie ma dla mnie sensu w chwili obecnej. Czy możesz wyjaśnić, skąd pochodzą Twoje dane i w jakim formacie. Czy tylko dodajesz do istniejących danych lub tworzysz wszystko od zera. Być może możesz utworzyć jsfiddle, aby zademonstrować, jaki masz problem. Czy to naprawdę pytanie, jak uzyskać dostęp do danych w tablicy/lub obiekcie javascript? I niech będzie jasne, o danych, JSON lub JavaScript obiektu: http://stackoverflow.com/questions/8294088/javascript-object-vs-json – Xotic750

+1

założyć "columnName" jest "firstName" i "column.value" jest wartość (na przykład: "John"). Po prostu muszę wiedzieć, jak je dynamicznie wciskać w nawiasy klamrowe ("{}"). – ohadinho

Odpowiedz

103

To jest to, czego potrzebujesz!

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

Skąd wiesz, że OP nie musi liczyć wierszy z'rowNum'? – Xotic750

+1

Push nie potrzebuje numeru wiersza –

+3

Nigdy nie powiedziałem, że tak. – Xotic750

54

Być może ta informacja ci pomoże.

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

ten temat, zwłaszcza odpowiedź Xotic750 było bardzo pomocne dla mnie. Chciałem wygenerować zmienną json, aby przekazać ją do skryptu php przy użyciu ajax. Moje wartości zostały zapisane na dwóch tablicach i chciałem je w formacie json. Jest to ogólny przykład:

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

Wynik w dzienniku konsoli powinno być coś takiego:

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

Czy mogę podkreślić przydatność do prawidłowego rozmieszczenia kodu, który tu przesyłasz? O wiele trudniej jest czytać bez odstępów. –

+0

Pomogło mi to bez końca. Dokładnie to, czego wymagałem. – Derek