如何使用默认值添加JSON模式可选的枚举项?

时间:2014-12-09 10:54:18

标签: json json.net jsonschema

我需要向JSON模式添加可选属性。 此属性为Enum类型。我需要在用户未指定此字段的情况下设置默认值。

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

如果用户不指定“Param”字段,则应将字段识别为“p2”

4 个答案:

答案 0 :(得分:1)

正如您在示例中所做的那样,“default”是一个有效的json-schema关键字。但它的使用取决于架构消费者。

考虑到json-schema与数据结构定义和验证有关。事实上,经过多次讨论后才添加了这个关键字,因为我们希望向客户提供一个默认值的提示,以防他们不想设置默认值。但是,再一次,由客户决定是否使用这个值。

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

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

在这种情况下,您告诉客户:“至少您必须向我发送”Param“,其值为”p2“。

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

答案 1 :(得分:0)

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
    }
}

答案 2 :(得分:0)

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

在这种情况下为:

%windir%\syswow64\mapi32.dll

,C语言中的等效项是:

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

希望获得帮助。

答案 3 :(得分:-1)

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