Json模式检查所有项目枚举都存在于对象数组中

时间:2016-11-18 11:26:59

标签: json validation enums jsonschema json-schema-validator

我有这样的json架构:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "country": {
        "type": "string",
        "maxLength": 2,
        "enum": ["aa", "bb"]
      }
    },
    "required": [
      "country"
    ]
  }
}

这种格式的json:

[
  {"country": "aa"},
]

我希望架构检查json文件是否包含枚举中列出的所有国家/地区:

[
  {"country": "aa"},
  {"country": "bb"},
]

有可能吗?

2 个答案:

答案 0 :(得分:1)

你可以使用v5 / 6包含关键字:

{
  "allOf": [
    { "contains": { "properties": { "country": { "constant": "aa" } } } },
    { "contains": { "properties": { "country": { "constant": "bb" } } } }
  ]
}

"constant": "aa"是另一个v5 / 6关键字,与"enum": ["aa"]相同。 目前Ajv支持这些关键字(一点自我推销)。

答案 1 :(得分:1)

对于那些不能使用@esp方便语法的人来说,这是一个旧式解决方案:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "country": {
                "type": "string",
                "maxLength": 2,
                "enum": ["aa", "bb"]
            }
        },
        "required": [
            "country"
        ]
    },
    "allOf": [
        {"not": {"items": {"not": {"properties": {"country": {"enum": ["aa"]}}}}}},
        {"not": {"items": {"not": {"properties": {"country": {"enum": ["bb"]}}}}}}
    ]
}