2012-06-14 12 views
7

vorrei creare un oggetto json per inviare come un array di post, ma ho bisogno di creare la chiave al voloCreazione di chiavi JSON al volo

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

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

inviarlo in forma di stringa funziona bene, ma ottengo un problema quando voglio renderlo più dinamico. Mi sto perdendo qualcosa di veramente semplice qui, o sto cercando di fare qualcosa che Javascript non dovrebbe fare?

+1

E 'solo "oggetto", non "oggetto JSON". –

+0

Hai provato questo: http://stackoverflow.com/questions/920930/how-to-create-json-by-javascript-for-loop? – msanford

risposta

17

(Si noti che questo non ha nulla a che fare con JSON. Non stai usando JSON lì, si sta utilizzando un object initializer. JSON è un formato testuale (non il codice), che è un sottoinsieme della sintassi di inizializzazione degli oggetti di JavaScript)

fare fuori l'inizializzatore di oggetto, usando la notazione []:.

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

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

Ciò prenderà il valore (in fase di esecuzione) di product[id] e lo userà come chiave per la proprietà. Se si voleva la chiave per letteralmente essere product[123] quando id è 123, utilizza questo, invece:

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

Una discussione più generica:

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

JavaScript consente di specificare le chiavi di proprietà in due modi: usare notazione punteggiata e letterale (obj.foo), o usare notazione con bracketing e una stringa (obj["foo"]). In quest'ultimo caso, la stringa non deve essere una stringa letterale, può essere il risultato di qualsiasi espressione.

+1

Ho interpretato la domanda come se volesse letteralmente un attributo chiamato 'prodotto [123]', ma la domanda non è chiara ... – Matt

+0

@Matt: Vedo la tua interpretazione, grazie. Non l'avrei letto in quel modo, ma ora lo hai sottolineato ... :-) –

0

Prova

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

Perché si utilizza '[]' in id dell'oggetto? Evita di fare questo.
nel campione, si può fare questo dal seguente codice:

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

O, se davvero davvero desidera utilizzare un arrry (in realtà, tutti gli oggetti vengono array in JavaScript). È possibile scrivere questo:

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

Questo creerà un oggetto ('post') con un attributo' 123' e un attributo 'id' ([demo ] (http://jsfiddle.net/sH38n/)). Inoltre, non c'è niente di sbagliato con lui usando '[]' nel nome di un attributo. – Matt

+0

Il codice crea un oggetto con i nomi di proprietà '123' e' id'. Fa ** non ** usa il valore della variabile 'id'. –

+0

Tutto in JavaScript è un oggetto, non il contrario; non è vero che tutti gli oggetti sono matrici. – Matt

Problemi correlati