JSON模式到Javascript类型的对象

时间:2012-10-23 10:27:34

标签: javascript json code-generation

是否有任何库可以从JSON模式生成Javascript类型对象(JS函数)?基本上是这个http://code.google.com/p/jsonschema2pojo/的等效JS版本。 感谢。

编辑:

从:

开始
{
    "description": "An entity",
    "type":"object",
    "properties": {
        "geometries": {"type": "array",
            "items": {
                "$ref" : "geometry"
             }
          }
    }
}

我想为我生成一些这样的代码

function Entity {
    this.geometries;
}

显然,使用$ ref等模式可能更复杂。我希望这可以提供这个想法。

3 个答案:

答案 0 :(得分:2)

这个djvi库是否满足您的要求?

提供的示例显示:

var jsonSchema = {"common":{"properties":{"type":{"enum":["common"]}},"required":["type"]}};

var env = new djvi();
env.addSchema('test', jsonSchema);
env.instance('test#/common');
// => { type: 'common' }

我怀疑这是你所追求的解决方案。

现在这不是您所追求的确切解决方案,但我遇到了类似的问题并创建了以下解决方案以将父对象作为函数返回,它可能会有所帮助:

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);

当然,你可以编写"实体"的检索脚本。但是你喜欢架构文档,但这种方式至少可以得到一个函数。

答案 1 :(得分:0)

我会说你自己就是那个人。 无论如何,这样做应该不会太困难。只需解析您拥有的JSON,然后迭代每个项目,为每个“类”应用您想要的逻辑,并将结果追加到字符串中。 完成后,打印该字符串并使用任何JS格式化程序来获取代码。

答案 2 :(得分:-1)

你唯一能做的就是向你的json对象添加一个_type_属性(以某种奇怪的方式命名它,以便它不会与其他文字冲突)来识别你的类型。然后,您可以将该字符串映射到javascript中列出可用属性的另一个对象。

你可以这样做 - 这并不意味着这是一个好主意。 Json被直接用于javascript。