2013-02-03 15 views
5

Ich versuche, eine JSON dynamisch zu machen, aber wenn ich so etwas tun:Dynamische Namen in json Schlüssel

var jsonVar = { 
    "section": {} 
} 

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

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

Ich habe den Schlüssel als element und _app_some_name nicht

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

Antwort

9

Beim Erstellen von Objektliteralen müssen Sie die Eigenschaftsnamen nicht angeben. In Ihrem Beispiel wird also elementName wörtlich genommen. Zum Glück können Sie die eckigen Klammer-Syntax verwenden (oder wie Sie das buchstabieren):

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

Das sollte die Dinge fix für Sie

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