2012-06-14 19 views
7

me gustaría crear un objeto json para enviar como una matriz de correos, pero necesito para crear la clave sobre la marchaCreación de claves JSON sobre la marcha

var id = $('#myInput').val(); 

var post = { 
    'product[123]': 'myValue',  // this works fine - but isn't dynamic 
    'product['+id+']': 'myValue' // this does not work 
} 

envío en forma de cadena funciona bien, pero tengo un problema cuando quiero hacerlo más dinámico. ¿Me estoy perdiendo algo realmente simple aquí, o estoy tratando de hacer algo que se supone que no debe hacer Javascript?

+1

Es sólo "objeto", no "objeto JSON". –

+0

¿Has probado esto: http://stackoverflow.com/questions/920930/how-to-create-json-by-javascript-for-loop? – msanford

Respuesta

17

(Tenga en cuenta que esto no tiene nada que ver con JSON. Usted no está utilizando JSON allí, que está utilizando una object initializer. JSON es un formato de texto (no código), que es un subconjunto de la sintaxis inicializador de objeto de JavaScript)

hacerlo fuera del inicializador de objeto, usando la notación []:.

var id = $('#myInput').val(); 

var post = {}; 
post[product[id]] = 'myValue'; 

Eso tomará el valor (en tiempo de ejecución) de product[id] y lo utilizará como la clave de la propiedad. Si quería la clave para literalmente ser product[123] cuando id es 123, tendrá que utilizar esto en su lugar:

post['product[' + id + ']'] = 'myValue'; 

Una discusión más genérico:

var a = "foo"; 
var obj = {}; 
obj[a] = "bar"; 
console.log(obj.foo); // "bar" 

JavaScript le permite especificar las claves de propiedades en de dos maneras: usando notación punteada y un literal (obj.foo), o usando notación entre corchetes y una cadena (obj["foo"]). En este último caso, la cadena no tiene que ser una cadena literal, puede ser el resultado de cualquier expresión.

+1

interpreté la pregunta que él literalmente queriendo un atributo llamado 'producto [123] ', pero la cuestión no está claro en absoluto ... – Matt

+0

@ Matt: Veo que su interpretación, gracias. No me he leído de esa manera, pero ahora que he señalado que fuera ... :-) –

0

Trate

post['product[' + id + ']'] = 'myValue'; 
0

¿Por qué usan '[]' en los identificadores del objeto? Evita hacer esto.
En la muestra, usted puede hacer esto mediante el siguiente código:

var id = $('#myInput').val(); 
var post = { 
    '123': 'myValue',  
    id: 'myValue' 
} 

O, si usted realmente realmente desea utilizar un arrry (en realidad, todos los objetos se array en JavaScript). Puede escribir esto:

var product=[]; 
product['123']='something'; 
product[id]='another'; 
+0

Esto creará un objeto ('Post') con un atributo' 123' y un atributo 'id' ([Demo ] (http://jsfiddle.net/sH38n/)). Además, no tiene nada de malo utilizar '[]' en nombre de un atributo. – Matt

+0

Su código crea un objeto con los nombres de propiedad '123' y' id'. ** No ** usa el valor de la variable 'id'. –

+0

Todo en JavaScript es un objeto, no al revés; no es cierto que todos los objetos sean matrices. – Matt

Cuestiones relacionadas