json – 如何使anyOf除了一个以外的一组多重属性

前端之家收集整理的这篇文章主要介绍了json – 如何使anyOf除了一个以外的一组多重属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个遗留API我试图在 JSON模式中定义,并且该对象有一个奇怪的结构,其中有一组4个属性,其中任何一个都是必需的,其中3个是互斥的.之后是超过30个共享的可选属性,我会将它们视为….

例如.,

{ "foo": "bar","baz": 1234,... }  // OK
{ "foo": "bar","buzz": 1234,... } // OK
{ "foo": "bar","fizz": 1234,... } // OK
{ "foo": 1234,... }                // OK
{ "baz": 1234,... }                // OK
{ ... }                             // NOT OK
{ "baz": 1234,... }  // NOT OK

我可以做一个但是这不允许foo与其他人一起出现,anyOf允许baz,buzz和fizz彼此存在,这是不可能的.

我尝试定义如下内容

{
    "type": "object","properties": {
        "foo": {"type": "string"},"baz": {"type": "number"},"buzz": {"type": "number"},"fizz": {"type": "number"}
    },"anyOf": [
        {"required": ["foo"]},{"required": [{"oneOf": [
                {"required": ["baz"]},{"required": ["buzz"]},{"required": ["fizz"]}
            ]}
        ]}            
    ]
}

{
    "type": "object",{"oneOf": [
                {"required": ["baz"]},{"required": ["fizz"]}
            ]
        }            
    ]
}

但这不起作用,我只是不了解json架构还知道这是否可能.

解决方法

有趣!可能有一个更简洁的解决方案,但我们在这里……

“互斥”约束可以通过禁止属性的成对组合来表示:

{
    "not": {
        "anyOf": [
            {"required": ["baz","buzz"]},{"required": ["buzz","fizz"]},{"required": ["fizz","baz"]}
        ]
    }
}

“至少一个”约束可以用anyOf表示:

{
    "anyOf": [
        {"required": ["foo"]},{"required": ["baz"]},{"required": ["fizz"]}
    }
}

如果您只是将这两个约束组合到一个模式中,那么它应该工作:

{
    "not": {"anyOf": [...]},"anyOf": ...
}

猜你在找的JavaScript相关文章