JSON Schema - 基于数组包含的匹配

时间:2015-03-04 06:19:43

标签: json jsonschema

我有以下简单的JSON模式,它根据我的数据的内容字段进行正则表达式匹配:

{  
    "$schema":"http://json-schema.org/schema#",
    "allOf":[  
       {  
          "properties":{  
           "content":{  
                "pattern":"some_regex"
             }
          }
       }
}

它成功匹配以下数据:

{
    "content": "some_regex"
}

现在假设我要添加一个UUID列表以忽略我的数据:

{
   "content": "some_regex",
   "ignoreIds" ["123", "456"]
}

如果我想在 ignoreIds 列表中存在给定值时修改我的架构不匹配,则会出现问题:

这是我失败的尝试:

{
  "$schema": "http://json-schema.org/schema#",
  "allOf": [{
    "properties": {
      "content": {
        "pattern": "some_regex"
      }
    }
  }, {
    "properties": {
      "ignoreIds": {
        "not": {
          // how do I say 'do not match if "123" is in the ignoreIds array'????
        }
      }
    }
  }]
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您的ignoreIds的JSON模式必须是:

"ignoreIds": {
    "type": "array",
    "items": { 
        "type": "integer", 
        "not": { 
            "enum": [131, 132, whatever numbers you want] 
        } 
    }
}

  

数组中与ignore-indeum匹配的任何值都会产生   json无效

这当然也适用于字符串数组:

"ignoreIds": {
    "type": "array",
    "items": { 
        "type": "string", 
        "not": { 
            "enum": ["131", "132"] 
        } 
    }
}

使用JSON Schema Lint

进行测试