我希望我的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"},
.
.
.
}
}
}
我的问题是:还有更好的方法吗?
答案 0 :(得分:1)
您不必指定所有可能的订单。当数组受enum
限制时,项目可以按任何顺序排列。但是,您必须指定枚举值的类型。
"sources":{
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"emum": ["CRD", "GOV", "COM"]
}