当前位置: 首页 > 知识库问答 >
问题:

在 OpenAPI 3.1 中,什么等同于多类型?anyof or oneOf?

严锐
2023-03-14

我想将多个类型(在JSON Schema的最新草案中支持,OpenAPI v3.1也支持)更改为< code>anyOf,< code>oneOf,但是我有点搞不清楚这些类型应该映射到哪个类型。或者我可以映射到两者中的任何一个。

另外,我确实了解<code>任何</code>、<code>其中一个</code>等。但多种类型的行为有点模棱两可。(我知道模式是无效的,但这只是一个更侧重于类型转换的示例。)

{
    "type": ["null", "object", "integer", "string"],
    "properties": {
        "prop1": {
            "type": "string"
        },
        "prop2": {
            "type": "string"
        }
    },
    "enum": [2, 3, 4, 5],
    "const": "sample const entry",
    "exclusiveMinimum": 1.22,
    "exclusiveMaximum": 50,
    "maxLength": 10,
    "minLength": 2,
    "format": "int32"
}

我是这样转换的。

{
    "anyOf": [{
            "type": "null"
        },
        {
            "type": "object",
            "properties": {
                "prop1": {
                    "type": "string"
                },
                "prop2": {
                    "type": "string"
                }
            }
        },
        {
            "type": "integer",
            "enum": [2, 3, 4, 5],
            "exclusiveMinimum": 1.22,
            "exclusiveMaximum": 50,
            "format": "int32"
        },
        {
            "type": "string",
            "maxLength": 10,
            "minLength": 2,
            "const": "sample const entry"
        }
    ]
}

共有2个答案

桂阳文
2023-03-14
匿名用户

首先,你举的例子不成立:

>

  • 初始架构与任何内容都不匹配,它是一个“不可能”的架构。“枚举”:[2, 3, 4, 5]“const”: “sample const entry” 约束是互斥的,“const”:“sample const entry”“maxLength”:10 也是如此。

    重写的架构不等同于原始架构,因为枚举const 已从根级别移动到子方案。是的,通过这种方式,模式更有意义,并且会起作用(例如,它将匹配指定的数字 - 但不是字符串!因为const vs maxLength矛盾),但它与原始模式不同。

    视情况而定。

    在< code>anyOf和< code>oneOf之间的选择取决于上下文,即一个实例是可以匹配多个子模式还是恰好匹配一个子模式。换句话说,多个子模式匹配被认为是OK还是错误。可空引用通常需要< code>anyOf,而不是< code>oneOf,但其他情况因模式而异。

    例如

    "type": ["number", "integer"]
    

    "type": ["string", "integer"]
    

    可以使用 oneOfanyOf 来表示。oneOf在语义上更接近,因为字符串和整数是完全不同的数据类型,没有重叠。但从技术上讲,anyOf也有效,只是在这种特殊情况下不会有多个子序列匹配。

    在您的示例中,所有基本的< code>type值都是不同的,没有重叠,因此我将使用< code>oneOf,但是从技术上讲< code>anyOf也可以。

  • 谷梁凌
    2023-03-14

    anyOf 为您提供了比 oneOf 更接近语义的匹配;

    问题(或好处!)的一个原因是,如果恰好匹配两种不同的情况,它将失败。

    例如,想象一下转换[“整数”,“数字”];如果输入为 1,则两者都匹配,并使用 oneOf 失败

     类似资料:
    • 问题内容: 我注意到了Collections.sort的规格: 为什么这里需要“ ”?如果是extend ,那么我们是否不能保证a 仍然能够比较两个对象而没有“ ”部分? 换句话说,给出以下代码: 为什么即使不为Collections.sort()的声明指定“ ”,编译器也不足够聪明地知道这是可以的? 问题答案: Josh Bloch今年在Google I / O上做了一个名为“ 有效Java重新

    • 我想看看Django模板中的字段/变量是否为none。正确的语法是什么? 这就是我目前拥有的: 在上面的示例中,我将使用什么来替换“null”?

    • byte的范围是-128~127。 字节长度为8位,最左边的是符号位,而127的二进制为01111111,所以执行+1操作时,01111111变为10000000。 大家知道,计算机中存储负数,存的是补码的兴衰。左边第一位为符号位。 那么负数的补码转换成十进制如下: 一个数如果为正,则它的原码、反码、补码相同;一个正数的补码,将其转化为十进制,可以直接转换。 已知一个负数的补码,将其转换为十进制数

    • 根据C 11标准(草案n3337)§5/9: -如果两个操作数的类型相同,则无需进一步转换。 -否则,如果两个操作数都具有有符号整数类型或都具有无符号整数类型,则整数转换秩较小的操作数类型应转换为秩较大的操作数类型。 -否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数类型的秩,则应将具有有符号整数类型的操作数转换为具有无符号整数类型的操作数的类型。 -否则,如果有符号整数类型的操作数

    • 问题内容: 我想知道PostgreSQL中的数据类型等效吗? 问题答案: 根据文档,您好像是您的朋友,范围从-9223372036854775808到9223372036854775807。

    • 问题内容: 我有一个大型数据库,其中包含有标签的记录,我想删除它们。当然,有一种方法可以创建一个全选,使用和更新数据库的PHP脚本,但这需要很长时间。那么,如何使用简单(或复杂)的MySQL查询来做到这一点? 问题答案: 我不相信仅在MySQL中有任何有效的方法可以做到这一点。 MySQL确实有一个功能,但是它只能替换常量字符串,不能替换模式。您可能会编写一个MySQL存储函数来搜索和替换标签,但