TV4 JSON Schema对象验证数组

时间:2015-01-12 03:52:06

标签: arrays json jsonschema tv4

我想验证名为“foo”的属性是否包含“bar”对象的数组。

使用TV4进行验证如果我使用数组作为foo的值,则所有工作都按预期工作但是如果我指定除了数组之外的其他内容(如字符串)或整数验证通过则不应该。

var json = { "foo" : { "one" : "bar" }};

使用格式正确的数组按预期传递。

var json = { "foo" : { "bar" : "error" }};

使用格式错误的数组按预期失败。

var json = { "foo" : 2 };

虽然foo应该是一个数组,但是传递事件。

以下是完整的代码。

var should = require("should");
var validator = require("tv4");

var barSchema = {
    "id": "bar",
    "type" : "object",
    "properties": {
        "one": {
            "type": "string"
        }
    },
    "required": ["one"],
    "additionalProperties": false
}

var fooSchema = {
    "id" : "foo",
    "title": "foo",
    "type": "object",
    "properties": {
        "foo" : {
            "type:" : "array",
            "items": {"$ref":"bar"}
        }
    },
    "required": [
        "foo"
    ]
}

describe("foo with integer", function() {
    it("should result in an error message", function(){
        var json = {
            "foo" : 2
        }
        validator.addSchema(barSchema);
        var result = validator.validate(json, fooSchema);

        // above should fail but it passes
    });
}); 

1 个答案:

答案 0 :(得分:0)

我认为您错过了将fooSchema添加到验证器中:

describe("foo with integer", function() {
    it("should result in an error message", function(){
        var json = {
            "foo" : 2
        }
        validator.addSchema(barSchema);
        validator.addSchema(fooSchema);
        var result = validator.validate(json, fooSchema);

        // above should fail but it passes
    });
});