带有tv4的patternProprties使用json模式验证

时间:2019-09-23 14:08:09

标签: node.js json support-v4 tv4

我有一个像json的

{"post": {"someKey": {"anotherKey":"anotherValue"}}}

并且第一个键是有效的http方法,并且可以在运行时为-post,get等所有有效的http方法之一。

这是我的模式

var schema = {
    "type": "object",
    "patternProperties": {
        "^[a-z]+$": {
            'properties': {
              "type": "object",
              'properties': {
                'someKey':{
                    'type': 'object',
                    'properties': {
                      'anotherKey': {'type': 'string'},
                    }
                }
            }
        }
      }
   }
}

var valid = { "post": {"mkey":"myvalue"}}; //This is getting passed but I know that is wrong
var invalid = { "1": {"mkey":"myvalue"}}; //This is passed but actually it should fail

console.log(tv4.validateMultiple(invalid, schema));

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我想通了:

{
    'type': 'object',
    'patternProperties': {
        '^(POST|GET|DELETE|HEAD|PATCH|HEAD|PUT)$': {
            'additionalProperties': false,
            'type': 'object',
            'required': ['someKey'],
            'properties': {
                'someKey': {
                    'type': 'string'
                }
            }
        }
    }
}

这里,需要注意的事情: 1.'additionalProperties':false对于patternProperties很重要 2.根据JSON Schema规范,您不能有不区分大小写的匹配,因此所有字母都是大写的