JSON 架构:必填字段上的异或


JSON

架构具有 required 属性,该属性列出了 JSON 对象中的必填字段。例如,以下(简化)架构验证向用户发送文本消息的调用:

{
  "type": "object",
  "properties": {
    "userId":    { "type": "string" },
    "text":      { "type": "string" },
  },
  "required": ["userId", "text"]
}

假设我想启用向多个用户发送消息,即具有userId字段或userIds数组(但不能两者兼而有之或两者都没有)。有没有办法在 JSON 架构中表达这样的条件?

当然,在这种情况下有一些方法可以克服这个问题 - 例如,具有单个元素的userId数组 - 但一般情况很有趣且有用。

您现在可能已经解决了这个问题,但这可以在字段的type上使用oneOf来完成。

{
  "type": "object",
  "properties": {
    "userId": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "text": {
      "type": "string"
    }
  },
  "required": ["userId", "text"]
}
一点

也不优雅,但我认为你可以从allOfoneOf中破解它。像这样:

 {
   "allOf" : [
      {
        "type" : "object",
        "properties" : {
          // base properties come here
        }
      },
      "oneOf" : [
        {
        "properties" : {
             "userIds" : {"type" : "array"}
          },
          "required" : ["userIds"]
        },
        {
          "properties" : {
             "userId" : {"type" : "number"}
          },
          "required" : ["userId"]
        }
      ]
   ]
}

相关内容

  • 没有找到相关文章

最新更新