json - 如何添加具有默认值的 JSON 模式可选枚举项?

标签 json json.net jsonschema

我需要向 JSON 模式添加一个可选属性。
此属性为 Enum 类型。如果用户未指定此字段,我需要设置默认值。

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

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

最佳答案

正如您在示例中所说,“默认”是一个有效的 json-schema 关键字。但它的使用取决于模式使用者。

考虑到 json-schema 与数据结构定义和验证有关。事实上,这个关键字是经过多次讨论后添加的,因为它太常见了,我们想给客户一个提示,告诉他们什么应该是默认值,以防他们不想设置一个。但是,再次由客户决定是否使用此值。

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

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

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

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

关于json - 如何添加具有默认值的 JSON 模式可选枚举项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377170/

相关文章:

php - 使用 PHP 将新的 MySQL 数据附加到 JSON 文件

json - 风筝SDK : Getting error while Json-import

python - 使用 JSON Schema 将日期/时间字符串解析为日期时间

java - 具有继承和引用的 Json Schema 生成器

jsonschema - 集合的 JSON 架构

java - android中使用json进行http连接时出错

c# - 如何将 JSON 输出转换为 C# 对象并将它们存储到数组中

c# - 使用 JSON.NET 进行序列化时,使自定义 JsonConverter 尊重 ItemTypeNameHandling

c# - 当 JSON 字典为空时,反序列化 JSON 字符串失败

javascript - 在 Node.js 中迭代大量 JSON 文件