2010-04-29 12 views
9

Me pregunto si es posible usar variables asignadas como identificador en una matriz json. Cuando probé este, que estaba recibiendo algunos resultados inesperados:Usando una variable como identificador en una matriz json

(Código se simplifica, los parámetros se pasan de una manera diferente)

 

var parameter = 'animal'; 
var value = 'pony'; 

Util.urlAppendParameters (url, {parameter : value}); 


Util.urlAppendParameters = function(url, parameters) { 
    for (var x in parameters) { 
     alert(x); 
    } 
} 

Ahora la ventana emergente de alerta dice: 'parámetro' en lugar de 'animal' . Sé que podría usar un método diferente (crear una matriz y asignar cada parámetro en una nueva línea), pero quiero mantener mi código compacto.

Así que mi pregunta es: ¿es posible usar una variable como identificador en la matriz json, y si es así, podría decirme cómo?

¡Gracias de antemano!

Respuesta

3

No, no puede usar una variable como identificador dentro de un objeto literal como ese. El analizador está esperando un nombre allí, por lo que no puede hacer mucho más que proporcionar una cadena. Del mismo modo no se podía hacer algo como esto:

var parameter = 'animal'; 
var parameter = 'value'; //<- Parser expects a name, nothing more, so original parameter will not be used as name 

El único trabajo en torno a si realmente desea utilizar un objeto literal en una sola línea es el uso de eval:

Util.urlAppendParameters (url, eval("({" + parameter + " : value})"); 
+0

Eso es exactamente lo que estaba buscando. No es que vaya a usarlo (realmente no lo quiero realmente: D), pero tenía mucha curiosidad sobre cómo podría resolverse. ¡Gracias! –

10

Usted tendrá que construir su objeto en dos pasos, y utilizar el descriptor de acceso [] propiedad:

var parameter = 'animal'; 
var value = 'pony'; 

var obj = {}; 
obj[parameter] = value; 

Util.urlAppendParameters (url, obj); 

No creo JSON matriz es el término más correcto, yo diría que es objeto literal.

+0

Sí, ya hice eso, pero solo quiero saber si es posible, como en otros lenguajes de programación (por ejemplo, escapando con palos de atrás, o simplemente con un signo $) Lo siento por el título impreciso, la terminología de programación no es mi mejor habilidad. –

+3

@CMS buscamos una solución en Internet durante mucho tiempo y la encontramos aquí, thx –

+2

@MichaelMoeller, ¡de nada! – CMS

1

Dependiendo de sus necesidades, también podría construir su objeto con una función de ayuda;

Util.createParameters = function(args) { 
    var O = {}; 
    for (var i = 0; i < arguments.length; i += 2) 
     O[arguments[i]] = arguments[i + 1]; 
    return O 
} 

Util.urlAppendParameters (url, Util.createParameters(parameter, value, "p2", "v2")); 
+0

¡También una solución genial! –

Cuestiones relacionadas