如果在没有项目的情况下不需要数组,如何指定JSON Schema?

时间:2018-03-28 08:47:34

标签: json jsonschema

说我有一些像这样的json数据:

{
    "quantity": 3,
    "modifiers": [{}]
}

如果没有将对象添加到modifiers的意图,我不希望modifiers存在。

如果没有modifiers

,这应该是正确的方法
{
    "quantity": 3,
}

这应该与modifiers

一致
{
    "quantity": 3,
    "modifiers": [{
        "testing": "some data here"
    }]
}

如何构建JSON模式以验证上述最不正确的示例?

编辑: 上述示例的JSON模式示例:

{
    "type": "object",
    "properties": {
        "quantity": {
            "type": "integer",
            "minimum": 1
        },
        "modifiers": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "testing": {
                        "type": "string"
                    }
                }
            },
            "minItems": 1
        }
    },
    "required": [
        "quantity"
    ]
}

2 个答案:

答案 0 :(得分:1)

你只缺少一件事。只需在"minProperties": 1添加/properties/modifiers/items

{
    "type": "object",
    "properties": {
        "quantity": {
            "type": "integer",
            "minimum": 1
        },
        "modifiers": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "testing": {
                        "type": "string"
                    }
                },
                "minProperties": 1
            },
            "minItems": 1
        }
    },
    "required": [
        "quantity"
    ]
}

答案 1 :(得分:0)

(仅限草案7)要允许数组为空(如果存在),请执行以下操作:

  "if": {
    "required": [
      "modifiers"
    ]
  },
  "then": {
    "properties": {
      "modifiers": {
        "minItems": 1
      }
    }
  }

这将确保这是无效的:

{
    "quantity" : 1,
      "modifiers":[]
}

但是请注意以下json是有效的:

{
    "quantity" : 1,
      "modifiers":[{}]
}

如果您不想要,请确保包含相应的required字段。这将是基于上面给定的示例/模式的最终模式的样子:

{
  "type": "object",
  "properties": {
    "quantity": {
      "type": "integer",
      "minimum": 1
    },
    "modifiers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "testing": {
            "type": "string"
          }
        },
        "required": [
          "testing"
        ]
      },
      "minItems": 1
    }
  },
  "required": [
    "quantity"
  ],
  "if": {
    "required": [
      "modifiers"
    ]
  },
  "then": {
    "properties": {
      "modifiers": {
        "minItems": 1
      }
    }
  }
}

现在,这也是无效的:

{
    "quantity" : 1,
      "modifiers":[{}]
}

这是有效的:

{
    "quantity" : 1,
      "modifiers":[{"testing":"343"}]
}