JSON 模式枚举与单值模式

JSON schema enum vs pattern for single value

我有样品json:

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

而且我必须为它制作一个模式(使用 JSON API specs and JSON 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 更好,原因有两个。

  1. pattern需要两行来表达。使用 enum 只需要一个,因为数组中的值隐含了 type。两行比一行更难读,所以如果那行足够表达,我说坚持使用一行。

  2. 并不是每个人都喜欢阅读正则表达式。由于这个原因,enum 可能更容易访问。

从 draft-6 开始,这个用例有一个名为 const 的新关键字。

"type": {
        "type": "string",
        "const": "persons"
},

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1.3