如何设置允许的值而不重复我自己?

时间:2019-09-05 10:26:05

标签: arrays json validation

我希望我的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"},
                    .
                    .
                    .
             }
  }
}

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

1 个答案:

答案 0 :(得分:1)

您不必指定所有可能的订单。当数组受enum限制时,项目可以按任何顺序排列。但是,您必须指定枚举值的类型。

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