如何在json模式中强制执行patternProperties字段?

时间:2015-05-06 17:39:44

标签: json jsonschema

这应该是一个非常快的是或否,但我还没有能够在SO或其他地方找到答案。我想制作一组模式,其中包含一个以entity模式为基础的良好的分层依赖方案。我想要的架构是

{                                                        
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "entity",                                      
    "type": "object",                                    
    "patternProperties": {                               
       "^.+Id$": {                                 
             "type": "string"                          
        }                            
    },
    "required": [
        "^.+Id$"
    ]                                          
}    

基本上,我希望每个实体(例如Person)都需要一个名为somethingId的字段(对于人,可能是personId)。但是,使用" required"以这种方式似乎强制一个名为"^.+Id$"的实际字段,而不是该对象必须有一个匹配该模式的字段。有没有办法在这里做我想要的?

提前致谢。

2 个答案:

答案 0 :(得分:1)

正如您在评论中提到的那样,您无法在必需条款中强制执行动态属性键。

但是,如果您可以允许嵌套定义,则可以按如下方式对标识符进行建模:

{
    "properties" : {
        "identifier" : {
            "additionalProperties" : false,
            "minProperties" : 1,
            "maxProperties" : 1,
            "patternProperties" : "^.+Id$ "
        }
    },
    "required": ["identifier"]
}

这样,您的标识符必须具有唯一属性,并且密钥会验证您的正则表达式。

答案 1 :(得分:0)

这可以在不使用此架构更改数据结构的情况下实现:

{
  "patternProperties" : {
    "^.+Id$": {                                 
      "type": "string"
    }
  },
  "minProperties": 1,
  "additionalProperties": false
}