JSON 架构 - 基于数组包含的匹配

JSON Schema - matching based on array inclusion

我有以下简单的 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'????
        }
      }
    }
  }]
}

任何帮助将不胜感激!

您的 JSON ignoreIds 架构必须是:

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

这表示

any value in the array ignoreIds matching the not-enum will make the json invalid

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

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

使用 JSON Schema Lint

测试