在 JSON 模式中定义枚举数组的正确方法

Posted

技术标签:

【中文标题】在 JSON 模式中定义枚举数组的正确方法【英文标题】:Correct way to define array of enums in JSON schema 【发布时间】:2015-09-04 14:49:50 【问题描述】:

我想用 JSON 模式数组来描述,它应该由零个或多个预定义值组成。为了简单起见,让我们有这些可能的值:onetwothree

正确的数组(应该通过验证):

[]
["one", "one"]
["one", "three"]

不正确:

["four"]

现在,我知道应该使用"enum" 属性,但我找不到相关信息将它放在哪里。

选项 A("items" 下):


    "type": "array",
    "items": 
        "type": "string",
        "enum": ["one", "two", "three"]
    

选项 B:


    "type": "array",
    "items": 
        "type": "string"
    ,
    "enum": ["one", "two", "three"]

【问题讨论】:

文档:Enumerated Values 【参考方案1】:

根据json-schemadocumentation,array的枚举值必须包含在"items"字段中:


    "type": "array",
    "items": 
        "type": "string",
        "enum": ["one", "two", "three"]
    

如果您有一个 array 可以容纳例如不同类型的项目,那么您的架构应该如下所示:


  "type": "array",
  "items": [
    
      "type": "string",
      "enum": ["one", "two", "three"]
    ,
    
      "type": "integer",
      "enum": [1, 2, 3]
    
  ]

【讨论】:

第二个例子不允许数组包含两种不同的类型。它是元组验证[1],它约束数组中的第一个和第二个项目以匹配“项目”数组中的第一个和第二个模式。 [1]json-schema.org/understanding-json-schema/reference/… 我认为在第二个示例中使用的正确构造可能是 anyOf: json-schema.org/understanding-json-schema/reference/…【参考方案2】:

选项 A 正确,满足您的要求。


    "type": "array",
    "items": 
        "type": "string",
        "enum": ["one", "two", "three"]
    

【讨论】:

以上是关于在 JSON 模式中定义枚举数组的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

为啥没有为 java 枚举正确生成 Json?

为不同类型的项目数组正确的 JSON Schema

C#题库02:选择题

Angular 7检查JSON解析是不是返回特定对象的正确方法[关闭]

递归 JSON 模式

使用gson,改进将json数组反序列化为模型的正确方法