JSON 架构:使用字段值作为必填字段名称
JSON schema: Use field value as required field name
我需要为 JSON 定义一个 JSON 架构,其中 field/key 被称为前一个字段的值。示例:
{
"key1": "SOME_VALUE",
"SOME_VALUE": "..."
}
{
"key1": "ANOTHER_VALUE",
"ANOTHER_VALUE": "..."
}
另外,第二个字段应该在必填字段中。
我一直在四处寻找,但不确定 JSON 架构是否提供此类功能。也许一些高级语义检查?
感谢您的帮助
唯一可以做到这一点的方法是事先知道这些值,但看起来这对您来说是不可能的。这需要在您的业务逻辑验证中而不是格式验证中。
所以,感谢 Relequestual 的建议,我设法找到了解决方案。
约束:"key1" 的可能值需要是有限的并且事先已知
假设我们需要一个 JSON 模式来验证 JSON :
- 需要字符串属性 "required_simple_property1" 和 "required_simple_property2"。
- 需要 属性 "key1" 作为具有 3 个可能值的枚举 ["value1"、"value2"、"value3"].
- 需要第三个 属性,其键必须是 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)
},
}
我需要为 JSON 定义一个 JSON 架构,其中 field/key 被称为前一个字段的值。示例:
{
"key1": "SOME_VALUE",
"SOME_VALUE": "..."
}
{
"key1": "ANOTHER_VALUE",
"ANOTHER_VALUE": "..."
}
另外,第二个字段应该在必填字段中。 我一直在四处寻找,但不确定 JSON 架构是否提供此类功能。也许一些高级语义检查?
感谢您的帮助
唯一可以做到这一点的方法是事先知道这些值,但看起来这对您来说是不可能的。这需要在您的业务逻辑验证中而不是格式验证中。
所以,感谢 Relequestual 的建议,我设法找到了解决方案。
约束:"key1" 的可能值需要是有限的并且事先已知
假设我们需要一个 JSON 模式来验证 JSON :
- 需要字符串属性 "required_simple_property1" 和 "required_simple_property2"。
- 需要 属性 "key1" 作为具有 3 个可能值的枚举 ["value1"、"value2"、"value3"].
- 需要第三个 属性,其键必须是 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)
},
}