JSON模式:使用字段值作为必填字段名称

时间:2019-07-04 14:45:36

标签: jsonschema

我需要为JSON定义一个JSON模式,在该JSON中,字段/键被称为前一个字段的值。例子:

{
  "key1": "SOME_VALUE",
  "SOME_VALUE": "..."
}
{
  "key1": "ANOTHER_VALUE",
  "ANOTHER_VALUE": "..."
}

此外,第二个字段应该在必填字段中。 我一直在环顾四周,但不确定JSON模式是否提供此类功能。也许一些高级语义检查?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

唯一的方法是提前知道值,但看来这对您来说是不可能的。这需要在业务逻辑验证中,而不是在格式验证中。

答案 1 :(得分:0)

因此,由于Relequestual的建议,我设法找到了解决方案。

约束:“ key1”的可能值必须是有限的,并且必须事先知道

假设我们需要一个用于验证JSON的JSON模式:

  1. 需要字符串属性“ required_simple_property1”和“ required_simple_property2”。
  2. 要求属性“ key1”作为枚举,带有3个可能的值[“ value1”,“ value2”,“ value3”]。
  3. 需要第三个属性,其键必须是key1所采用的值。

这可以通过以下模式完成:

"oneOf": [
    {
        "required": [
            "required_simple_property1",
            "required_simple_property2",
            "value1"
        ],
        "properties": {
            "key1": {
                "type": "string",
                "const": "value1"
            }
        } 
    },
    {
        "required": [
            "required_simple_property1",
            "required_simple_property2",
            "value2"
        ],
        "properties": {
            "key1": {
                "type": "string",
                "const": "value2"
            }
        } 
    },
    {
        "required": [
            "required_simple_property1",
            "required_simple_property2",
            "value3"
        ],
        "properties": {
            "key1": {
                "type": "string",
                "const": "value3"
            }
        } 
    }
],
"properties": {
    "required_simple_property1": {
        "type": "string"
    },
    "required_simple_property2": {
        "type": "string"
    },
    "value1": {
        ... (anything)
    },
    "value2": {
        ... (anything)
    },
    "value3": {
        ... (anything)
    },
}