2010-11-30 25 views
26
var myJSON = { 
       "list1" : [ "1", "2" ], 
       "list2" : [ "a", "b" ], 
       "list3" : [ { "key1" : "value1" }, { "key2" : "value2" } ], 
       "not_a_list" : "11" 
      }; 

¿Cómo construyo dinámicamente esta estructura JSON en javascript? Google me dice que use usar algún comando de inserción, pero solo he encontrado casos específicos. Entonces, ¿qué debo escribir para ingresar datos en "listX" y "not_a_list"? Agregar y crear una nueva lista. Todo el begninning procedimiento con:¿Cómo construyo JSON dinámicamente en javascript?

var myJSON = {}; 
+0

¿Realmente quiere decir JSON (que es una cadena) o una colección de objetos, matrices, cadenas y números JavaScript (que se pueden serializar a JSON)? – Quentin

Respuesta

53

En primer lugar, creo que lo está llamando mal. "JSON" significa "notación de objetos de JavaScript": es solo una especificación para representar algunos datos en una cadena que imita explícitamente los literales de objetos JavaScript (y matriz, cadena, número y booleano). Está intentando crear un objeto JavaScript dinámicamente, por lo que la palabra que está buscando es "objeto".

Con esa pedantería fuera del camino, creo que está preguntando cómo establecer las propiedades de objeto y matriz.

// make an empty object 
var myObject = {}; 

// set the "list1" property to an array of strings 
myObject.list1 = ['1', '2']; 

// you can also access properties by string 
myObject['list2'] = []; 
// accessing arrays is the same, but the keys are numbers 
myObject.list2[0] = 'a'; 
myObject['list2'][1] = 'b'; 

myObject.list3 = []; 
// instead of placing properties at specific indices, you 
// can push them on to the end 
myObject.list3.push({}); 
// or unshift them on to the beginning 
myObject.list3.unshift({}); 
myObject.list3[0]['key1'] = 'value1'; 
myObject.list3[1]['key2'] = 'value2'; 

myObject.not_a_list = '11'; 

Ese código se acumulará el objeto que ha especificado en su pregunta (salvo que yo llamo MyObject en lugar de myJSON). Para obtener más información sobre el acceso a propiedades, recomiendo el Mozilla JavaScript Guide y el libro JavaScript: The Good Parts.

+0

En cuanto a "las teclas son números" (y son ligeramente pedantes): no es así, las claves siempre son cadenas en objetos (incluidas las matrices), y '[0]' etc. se transforma implícitamente en '[" 0 "]' etc. . (ver, por ejemplo, https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys). –

12

Como myJSON es un objeto que sólo puede establecer sus propiedades, por ejemplo:

myJSON.list1 = ["1","2"]; 

Si usted no sabe el nombre de las propiedades, usted tiene que utilizar el acceso a matriz sintaxis:

myJSON['list'+listnum] = ["1","2"]; 

Si desea agregar un elemento a una de las propiedades, puede hacerlo;

myJSON.list1.push("3"); 
Cuestiones relacionadas