如何添加具有默认值的 JSON 架构可选枚举项



我需要向 JSON 架构添加一个可选属性。此属性属于枚举类型。如果用户未指定此字段,我需要设置默认值。

// schema
"properties" : {
    "Param" : {
        "type" : "string",
        "enum" : [ " p1", "p2" ],
        "optional" : true,
        "default" : "p2",
        "required" : true
    }
}

如果用户不指定"参数"字段,则应将字段识别为"p2"

null添加到enum数组

更多: https://json-schema.org/understanding-json-schema/reference/generic.html#enumerated-values

"properties" : {
    "Param" : {
        "type" : "string",
        "enum" : [ " p1", "p2", null ], // <--
        "default" : "p2", // <--
        "required" : true
    }
}

正如您在示例中所说的那样,"default"是一个有效的 json 架构关键字。但它的使用取决于架构使用者。

考虑到 json 架构与数据结构定义和验证有关。事实上,这个关键字是在经过大量讨论后添加的,因为它非常普遍,我们希望向客户端提示什么是默认值,以防他们不想设置默认值。但是,同样,是否使用此值取决于客户端。

处理特定情况的另一种方法是使用"oneOf"拆分枚举值。

"required" : ["Param"],
"oneOf" : [{
        "properties" : {
            "Param" : {
                "enum" : ["p2"]
            }
        }
    }, {
        "properties" : {
            "Param" : {
                "enum" : ["p1", "p3"]
            }
        }
    }
]

在这种情况下,您告诉客户:"至少您必须向我发送值为"p2"的"参数"。

最后,您还可以在服务器端添加一个预处理步骤,在该步骤中,您将所有缺少的属性都设置为默认值,并在验证之前将它们添加到 json 消息中。

解决方案不在模式中,而是在解析器/编译器中;未指定的字段在传输到变量时应具有值 0。

在这种情况下,它将是:

   "enum" : [ "p2", "p1" ],

C中的等价物是:

enum {
 p2 = 0,
 p1 = 1
}

希望这有帮助。

"properties" : {
    "Param" : {
        "type" : "string",
        "enum" : ["p1", "p2"],
        "default" : "p2"
    }
},
"required" : ["Param"]

相关内容

  • 没有找到相关文章