【问题标题】:JSON Schema: Using anyOf, oneOf, allOf within additionalPropertiesJSON 模式:在附加属性中使用 anyOf、oneOf、allOf
【发布时间】:2016-12-12 19:00:23
【问题描述】:

我正在尝试验证一个可以具有任意键的对象,其值是一个看起来像这样的对象: { "href": "some string" }

或包含与上述匹配的对象的数组。

这是我目前拥有但不工作的:

{
    "$schema": "http://json-schema.org/schema#",
    "id": "https://turnstyle.io/schema/links.json",
    "type": "object",
    "additionalProperties": {
        "oneOf": [
            {
                "type": "object",
                "required": "href"
            },
            {
                "type": "array",
                "items": {
                    "type": "object",
                    "required": "href"
                }
            }
        ]
    }
}



Passing example:
{
    "customer": { "href": "/customer/1" },
    "products": [
        { "href": "/product/1" },
        { "href": "/product/2" }
    ]
}

Failing example:
{
    "customer": { "wrongKey": "/customer/1" },
    "products": "aString"
}

有没有可能,如果有,正确的语法是什么?

我的假设是这不起作用,因为additionalProperties 的oneOf|anyOf|allOf 中的传递模式必须适用于additionalProperties 下的所有键。

【问题讨论】:

  • “我的假设是这不起作用,因为在附加属性的 oneOf|anyOf|allOf 中传递的模式必须适用于属于附加属性的所有键。”不,根据 oneOf 内部的不同模式,不同的键可以是有效的。在这种情况下,anyOf 也更有效。

标签: json validation jsonschema


【解决方案1】:

“required”应该是v4中强制属性的数组。

或“必需”:true(或 false)作为 v3 中属性的一部分。

试试这个:

{
    "$schema": "http://json-schema.org/schema#",
    "id": "https://turnstyle.io/schema/links.json",
    "type": "object",
    "additionalProperties": {
        "oneOf": [
            {
                "type": "object",
                "properties": {
                  "href": {"type": "string"}
                },
                "required": ["href"]
            },
            {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                      "href": {"type": "string"}
                    },
                    "required": ["href"]
                }
            }
        ]
    }
}

【讨论】:

  • 此架构缺少“必需”关键字。它将接受一个空对象作为值或空对象数组。
  • @AsyaKamsky 你是对的。目前尚不完全清楚这是否确实是可接受的输入,但似乎不是,所以我相应地更新了架构
猜你喜欢
  • 2020-02-03
  • 2022-01-14
  • 2016-12-08
  • 2017-07-18
  • 2017-06-02
  • 2021-10-26
  • 2019-03-23
  • 1970-01-01
  • 2022-06-11
相关资源
最近更新 更多