基于对键中值的求反来创建Json模式依赖关系

基于对键中值的求反来创建Json模式依赖关系,json,jsonschema,Json,Jsonschema,我试图在上面的json结构中提供一个json模式,其条件如下 1有一个键eventType,它可以有1000个以上的值 2除事件类型外,还有4个其他相关属性 3我想写一个模式定义,其中 a如果事件类型为!=[x,y,z],然后包括所有4个 从属属性 b如果eventType=[x,y,z],则仅包括 作为依赖项的设备细节 我能用一个吗?我知道我们可以在3a中使用not键进行否定检查。但是我不能把这些点连起来。请帮忙指点一下 如果届时包括所有4个相关属性,您的意思是使它们成为必需属性,那么我可以想

我试图在上面的json结构中提供一个json模式,其条件如下

1有一个键eventType,它可以有1000个以上的值

2除事件类型外,还有4个其他相关属性

3我想写一个模式定义,其中

a如果事件类型为!=[x,y,z],然后包括所有4个 从属属性

b如果eventType=[x,y,z],则仅包括 作为依赖项的设备细节

我能用一个吗?我知道我们可以在3a中使用not键进行否定检查。但是我不能把这些点连起来。请帮忙指点一下

如果届时包括所有4个相关属性,您的意思是使它们成为必需属性,那么我可以想到这个基于草案07的解决方案:

如果eventType设置为x、y或z,则只有DeviceDetails是必需的。否则,其他一切都是错误的。我将让您自己替换这些占位符值:

我冒昧地将minProperties:1设置为DeviceDetails、appDetails和ClientDetails,因为我认为您更喜欢非空对象。如果没有必要,您可以安全地将其从模式中删除

{
      "eventType": "memory_exceeded",
      "event_time": 1544423819843,
      "clientDetails": {},
      "appDetails": {},
      "DeviceDetails": {}
    }
{
  "properties": {
    "eventType": {
      "type": "string"
    },
    "event_time": {
      "type": "integer"
    },
    "ClientDetails": {
      "type": "object",
      "minProperties": 1
    },
    "appDetails": {
      "type": "object",
      "minProperties": 1
    },
    "DeviceDetails": {
      "type": "object",
      "minProperties": 1
    }
  },
  "if": {
    "properties": {
      "eventType": {
        "enum": [
          "x",
          "y",
          "z"
        ]
      }
    }
  },
  "then": {
    "required": [
      "DeviceDetails"
    ]
  },
  "else": {
    "required": [
      "event_time",
      "ClientDetails",
      "appDetails",
      "DeviceDetails"
    ]
  }
}