2

JSON Schemas 有一个required属性,它列出了 JSON 对象中的必填字段。例如,以下(简化的)模式验证向用户发送文本消息的调用:

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

假设我想启用将消息发送给多个用户,即有一个userId字段或一个数组userIds(但不是两者或都没有)。有没有办法在 JSON Schema 中表达这样的条件?

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

4

2 回答 2

1

一点也不优雅,但我认为你可以从allOfand中破解它oneOf。就像是:

 {
   "allOf" : [
      {
        "type" : "object",
        "properties" : {
          // base properties come here
        }
      },
      "oneOf" : [
        {
        "properties" : {
             "userIds" : {"type" : "array"}
          },
          "required" : ["userIds"]
        },
        {
          "properties" : {
             "userId" : {"type" : "number"}
          },
          "required" : ["userId"]
        }
      ]
   ]
}
于 2016-07-15T11:04:41.267 回答
1

您现在可能已经解决了这个问题,但这将oneOftype现场使用。

{
  "type": "object",
  "properties": {
    "userId": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "text": {
      "type": "string"
    }
  },
  "required": ["userId", "text"]
}
于 2018-04-13T08:16:23.963 回答