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":"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"]
}
}
}
测试