2010-04-29 11 views
9

Mi chiedo se sia possibile utilizzare le variabili assegnate come identificatore in un array json. Quando ho provato questo, mi è stato sempre alcuni risultati inaspettati:Utilizzo di una variabile come identificatore in un array json

(Codice è semplificata, i parametri vengono passati in modo diverso)

 

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

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


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

Ora finestra di avviso dice: 'parametro' invece di 'animali' . So che potrei usare un metodo diverso (creare un array e assegnare ogni parametro su una nuova riga), ma voglio mantenere il mio codice compatto.

Quindi la mia domanda è: è possibile utilizzare una variabile come identificatore nell'array json e, in caso affermativo, potrebbe dirmi come?

Grazie in anticipo!

risposta

3

No, non è possibile utilizzare una variabile come identificatore all'interno di un oggetto letterale come quello. Il parser si aspetta un nome lì quindi non puoi fare molto altro ma fornire una stringa. Allo stesso modo non si poteva fare qualcosa di simile:

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

L'unico lavoro intorno se davvero vuole veramente utilizzare un oggetto letterale su una singola riga è quello di utilizzare eval:

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

Questo è esattamente quello che stavo cercando. Non che lo userò (di sicuro non lo voglio davvero: D), ma ero davvero curioso di sapere come avrebbe potuto essere risolto. Grazie! –

10

Avrete bisogno di costruire il vostro oggetto in due fasi, e utilizzare la funzione di accesso [] proprietà:

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

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

Util.urlAppendParameters (url, obj); 

Non credo JSON Array è il termine più corretto, lo chiamerei oggetto letterale.

+0

Sì, ho già Ho fatto questo, ma voglio solo sapere se è possibile, come in altri linguaggi di programmazione (es. fuggire con i backtick, o solo con un segno $) Scusate per il vago titolo, la terminologia di programmazione non è la mia migliore abilità. –

+3

@CMS abbiamo cercato in internet una soluzione per un lungo periodo e l'abbiamo trovata qui, grazie al –

+2

@ Michael Michael, siete i benvenuti! – CMS

1

A seconda delle esigenze, è possibile creare il proprio oggetto con una funzione di supporto;

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

Anche una soluzione interessante! –

Problemi correlati