Deckt diese Bibliothek djvi Ihre Anforderungen?
Das bereitgestellte Beispiel zeigt:
var jsonSchema = {"common":{"properties":{"type":{"enum":["common"]}},"required":["type"]}};
var env = new djvi();
env.addSchema('test', jsonSchema);
env.instance('test#/common');
// => { type: 'common' }
Ich vermute, dass die Lösung Sie nach.
Nun ist diese nicht die genaue Lösung ist Sie nach, aber ich hatte ein ähnliches Problem und erstellt die folgende Lösung ein übergeordnetes Objekt als Funktion zurückzukehren, es helfen kann:
var dbdict = {
"title": "Entity",
"description": "An entity",
"type":"object",
"properties": {
"geometries": {"type": "array",
"items": {
"$ref" : "geometry"
}
}
}
}
var walkJSONSchema = function (JSONSchema, returnFunction) {
var walkObject = function(PROPS) {
var $this = this,
$child = {}
;
if(returnFunction == true) {
$child = new function() {};
}
//console.log("PROPS");
//console.log(PROPS);
for(var key in PROPS) {
console.log("key:"+key+" type:"+PROPS[key].type+" default:"+PROPS[key].default);
switch(PROPS[key].type) {
case "boolean":
$child[key] = PROPS[key].default || undefined;
break;
case "integer":
case "number":
$child[key] = PROPS[key].default || undefined;
break;
case "array":
$child[key] = [].push($this.walkObject(PROPS[key].properties));
break;
case "object":
$child[key] = $this.walkObject(PROPS[key].properties);
break;
case "string":
$child[key] = PROPS[key].default || undefined;
break;
};
};
return $child;
}
return walkObject(JSONSchema.properties);
}
Entity = walkJSONSchema(dbdict, true);
Natürlich könnten Sie Skript den Abruf der "Entity" aus dem Schema doc wie Sie möchten, aber auf diese Weise erhalten Sie zumindest eine Funktion.
JSON ist gültig Javascript, Sie wissen. –
Bitte poste etwas Code. –
Willkommen bei Stack Overflow. Sie können den Quellcode mit der Symbolleistenschaltfläche '{}' formatieren. Ich habe es diesmal für dich getan. –