2013-02-03 7 views
5

Próbuję zrobić JSON dynamicznie, ale gdy robię coś takiego:dynamiczne nazwa w json klucz

var jsonVar = { 
    "section": {} 
} 

var elementsStoragePrefix = "_app_", 
    elementName = elementsStoragePrefix + "some_name"; 

$.extend(jsonVar .section, { elementName: "<option>This is a text</option>"}); 

Dostałem klucz jako elementName i nie _app_some_name

jsonVar.section => 
    Object 
     elementName: "<option>This is a text</option>" 
     __proto__: Object 

Odpowiedz

9

Podczas tworzenia literałów obiektów nie trzeba podawać nazw właściwości, więc w twoim przykładzie elementName zostanie wzięty dosłownie. Na szczęście, można użyć kwadratowej wspornik składni (czy jak się pisze):

var extendObject = {}; 
extendObject[elementName] = '<option>Foobar</option>'; 
$.extend(jsonVal.section, extendObject); 
//or, to use brackets all the way: 
$.extend(jsonVal['section'], extendObject); 

To powinno rozwiązać rzeczy dla ciebie

4
jsonVar.section[elementName] = "<option>This is a text</option>";