将JSON schema转换为JavaScript类型化对象

11

有没有可以从JSON模式生成JavaScript类型对象(JS函数)的库?基本上是这个的JS版本 http://code.google.com/p/jsonschema2pojo/

谢谢。

编辑:

起点为:

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

我希望有类似这样的代码为我生成

function Entity {
    this.geometries;
}

显然,模式可能会更加复杂,包括 $ref 等等,希望这能给您一个思路。


JSON是有效的Javascript,你知道的。 - Waleed Khan
1
欢迎来到 Stack Overflow。你可以使用“{}”工具栏按钮格式化源代码。这一次我已经为你完成了。 - Álvaro González
3个回答

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

当然,你可以按照自己的方式编写脚本从模式文档中检索“实体”,但是这种方法至少会得到一个函数。

0

我想说这个你得自己解决了。

不过,做起来应该不难。只需要解析你拥有的JSON,然后迭代每个项目,对每个“类”应用你想要的逻辑并将结果附加到一个字符串中。

完成后,打印该字符串并使用任何JS格式化程序获取你的代码。


1
谢谢,我只是想知道是否已经有相关的东西存在。甚至不确定使用那些对象而不是 JSON 对象本身是否是一个好主意。 - Tarelli
这取决于你具体想做什么。我记得在 C# 中看到过类似的内容,但不确定在哪里,也许你应该试试谷歌。 - alexandernst

-2
唯一能做的就是给你的JSON对象添加一个`_type_`属性(取一个奇怪的名字,以免与其他文字冲突),用来标识你的类型。然后你可以在JavaScript中将该字符串映射到另一个对象,列出可用的属性。
你可以这样做,但并不意味着这是个好主意。JSON本身就是为了直接在JavaScript中使用而设计的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接