首页 文章

基于键的值的否定创建Json模式依赖性

提问于
浏览
0
{
      "eventType": "memory_exceeded",
      "event_time": 1544423819843,
      "clientDetails": {},
      "appDetails": {},
      "DeviceDetails": {}
    }

我试图在上面的json结构中使用具有以下条件的json模式 .

1)有一个关键的“eventType”,它可以有1000个值 .

2)还有4个其他依赖属性以及event_type .

3)我想写一个架构定义在哪里

a)如果“eventType”!= [“x”,“y”,“z”],则包括所有4个相关属性 . b)如果“eventType”= [“x”,“y”,“z”],则仅包括“DeviceDetails”作为依赖 .

我可以使用OneOf吗?我知道我们可以在3a中使用“not”键进行否定检查 . 但我无法加入这些点 . 请帮助指点 .

1 回答

  • 1

    如果通过"then include all the 4 dependent properties"表示将它们作为必需的属性,那么我可以想到这个基于draft-07的解决方案:

    如果 eventType 设置为"x","y"或"z",则只有DeviceDetails是必需的 . 否则一切都是 . (我会让你自己替换这些占位符值:)

    我冒昧地将 minProperties: 1 设置为 DeviceDetailsappDetailsClientDetails ,因为我认为你没有必要安全地从模式中删除它 .

    {
      "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"
        ]
      }
    }
    

相关问题