【发布时间】:2021-09-23 16:35:21
【问题描述】:
在 JSON 模式中,我想添加一个验证,如果有效负载匹配如下
{
"key1": "value1",
"key1": "value2"
}
然后期望第三个键“key3”具有任何值。
但如果 key1 和 key2 的值分别与 value1、value2 不匹配,则 key3 不应该存在。
JSON 架构如下所示
{
"$async": true,
"additionalProperties": false,
"properties": {
"key1": {
"type": "string"
},
"key2": {
"type": "string"
}
},
"required": ["key1"],
"allOf": [
{
"if": {
"properties": {
"key1": {
"const": "value1"
},
"key2": {
"const": "value2"
}
}
},
"then": {
"properties": {
"key3": {
"type": "string"
}
},
"required": ["key3"]
},
"else": {
}
}
]
}
有效的输入是
{
"key1": "value1",
"key2": "value2",
"key3": "some-value"
}
--------
{
"key1": "value1",
"key2": "other-value"
}
---------
{
"key1": "value1"
}
---------
{
"key1": "other-value",
"key2": "value2"
}
---------
{
"key1": "other-value1",
"key2": "other-value2"
}
无效的输入是
{
"key1": "value1",
"key2": "value2". // key3 should be present
}
--------
{
"key1": "hello",
"key2": "world",
"unexpected-key": "value" // Any other key should not be allowed
}
--------
{
"key1": "value1",
"key2": "other-value",
"key3": "abc" // should not be present
}
---------
{
"key1": "other-value",
"key2": "value2",
"key3": "abc" // should not be present
}
---------
{
"key1": "other-value1",
"key2": "other-value2",
"key3": "abc" // should not be present
}
对于下面的有效载荷,JSON schema validator
{
"key1": "value1",
"key2": "value2",
"key3": "abc"
}
抛出以下错误
Property 'key3' has not been defined and the schema does not allow additional properties.
如何实现这个条件属性?
【问题讨论】:
-
我想要的是条件属性。这和问题说的不一样吗?
-
抱歉,我误读了这个问题。我将撤回我的投票以结束并为您提供答案! =]
-
如果您包含适合您情况的真实值而不是
foo/bar类型值,这将很有帮助。不太可能误读问题=] -
我个人认为添加真实值会使问题更难理解。因为读者必须先了解领域问题,然后再了解实际问题。而如果使用通用值,则可以减轻理解特定领域事物的负担。我认为给出的例子应该是不言自明的
标签: json jsonschema