2016-10-31 4 views
0

Ich versuche ein JS-Objekt mit einem benutzerdefinierten Attributnamen zu erstellen. Grundsätzlich möchte ich ein Schema basierend auf dem Wurzelelement erstellen. („Artikel“, wenn Typ-Array und „Eigenschaften“, wenn Typ-Objekt)Eine benutzerdefinierte Variable als JSON-Attribut hinzufügen

var helperObj = type.toLowerCase() === "array" ? "items" : "properties"; 
    var newSchema = { 
     "title": title, 
     "type": type, 
     helperObj.toString() : {} 
    }; 

Die oben einen Syntaxfehler gibt:

Syntaxerror: fehlend: nach Immobilien ID

Dann habe ich versucht, Analysiere einen String als JSON.

var schemaString="{ \"title\":"+title+", \"type\":"+type.toLowerCase()+","+helperObj+":{} }"; 
    var newSchema=JSON.parse(schemaString); 

Dies gibt eine Fehlermeldung,:

Syntax: JSON.parse: unerwartetes Zeichen in Zeile 1 Spalte 11 der JSON-Daten

Wie kann ich ein JS Objekt erhalten wie gewünscht?

+2

Wenn Sie ES6 verwenden, können Sie schreiben '{[helperObj]: {}}'. Lesen Sie auch [this] (http://stackoverflow.com/questions/9398535/add-dynamic-key-value-pairs-to-javascript-array-or-hash-table). –

+2

[So etwas wie ein "JSON-Objekt" gibt es nicht.] (Http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) – nnnnnn

+1

@ Aᴍɪʀ es funktionierte und auch die Methode in der Post hat funktioniert. Vielen Dank. – SachiDangalla

Antwort

3

Sie könnten tun

var helperObj = type.toLowerCase() === "array" ? "items" : "properties"; 
var newSchema = { 
    "title": title, 
    "type": type, 
}; 

newSchema[helperObj] = {}; 

oder verwenden, wenn Sie es6 verwenden:

var helperObj = type.toLowerCase() === "array" ? "items" : "properties"; 
var newSchema = { 
    "title": title, 
    "type": type, 
    [helperObj] : {} 
}; 
+1

Ja, das ist im Grunde die Lösung von AMIR - danke – SachiDangalla

Verwandte Themen