JSON 模式枚举与单值模式

标签 json enums jsonschema json-api

我有一个示例 json:

{
    "type": "persons",
    "id": 2,
    "attributes": {
        "first": "something",
        "second": "something else"
    }
}

我必须为它制作一个架构(使用 JSON API specsJSON schema docs ):
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "pattern": "^persons$"
        },
        "id": {
            "type": "integer"
        },
        "attributes": {
            "type": "object",
            "properties": {...}
        }
    },
    "required": ["type", "id", "attributes"]
}

问题是:如果“type”的唯一可接受值是“persons”,我应该在模式模式(如上)中使用还是像枚举一样使用
"enum": ["persons"]

我无法从文档中得到任何明确的答案,尽管在规范中的示例中枚举用于单个值。那么你有什么看法呢?

最佳答案

最终,这并不重要。两者都有效,而且都是合理的。也就是说,我见过的最常见的方法是使用 enum .两者都不是完美的可读性,但我认为 enum更好的原因有两个。

  • 使用 pattern需要两行来表达。使用 enum只需要一个,因为 type由数组中的值暗示。两行比一行更难阅读,所以如果这行足够表达,我说坚持一。
  • 不是每个人都喜欢阅读正则表达式。 enum由于这个原因,可能更容易访问。
  • 关于JSON 模式枚举与单值模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085443/

    相关文章:

    javascript - 如何循环遍历包含数组的 JSON 对象?

    c++ - 从枚举输出的错误值

    objective-c - Obj-C/Swift 混合中的枚举和数组访问

    JSON 架构 : conditional dependency

    C#更好地实现JSON文件

    json - 使用 NSJSONSerialization 从 json 响应构建对象

    java - 寻找一种简单的方法来解析 JSON

    typescript - 无法将字符串值分配给 typescript 枚举(初始化程序类型字符串不可分配给变量类型)

    java - jsonschema2pojo 还生成自定义注释器的对象

    json - 如何在 jMeter 中使用 JSONSchema 验证 JSON 数据