【问题标题】:How do I set the allowed values without repeating myself?如何在不重复自己的情况下设置允许的值?
【发布时间】:2020-01-08 05:36:44
【问题描述】:

我希望我的 JSON 架构接受一个列表,但列表中的值来自一个集合列表并且可以以任何顺序出现!

["GOV","CRD", "CON"] 可以接受,["CRD", "GOV", "COM"] 也可以。

我目前的想法是这样的:

"sources":{"type": "array",
           "uniqueItems": true,
           "emum": ["CRD", "GOV", "COM", "CON", "OTH", "UTL", "PRO", "TEL", "POS", "INS", "CCJ", "POP", "VOT", "MVR", "PPS", "DRV", "PMC"]},

但我不完全确定这会达到我想要的效果。我已经阅读了items,您可以在其中定义列表中的值,但看起来这会设置顺序以及列表中的项目数。虽然两者都可以使用 oneOf 结合定义来解决。

例如(为节省空间而缩短)如果我错了,请随时纠正:

{
  "definitions": {
      "source":{"emum": ["CRD", "GOV", "COM", "CON", "OTH", "UTL", "PRO", "TEL", "POS", "INS", "CCJ", "POP", "VOT", "MVR", "PPS", "DRV", "PMC", ""]},
  }
  "sources":{"type": "array",
             "uniqueItems": true,
             "items": {
                     "source": {"$ref": "#/definitions/source"},
                     "source": {"$ref": "#/definitions/source"},
                     "source": {"$ref": "#/definitions/source"},
                    .
                    .
                    .
             }
  }
}

我的问题是:有更好的方法吗?

【问题讨论】:

标签: arrays json validation


【解决方案1】:

您不必指定所有可能的顺序。当数组由enum 限制时,项目可以以任何顺序出现。但是,您必须指定枚举值的类型。

"sources":{
           "type": "array",
           "uniqueItems": true,
           "items": {
              "type": "string",
              "emum": ["CRD", "GOV", "COM"]
           }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2019-11-18
    相关资源
    最近更新 更多