我使用草案-04来定义JSON模式。我最初的问题是,我想为下面的结构定义模式
{
"config1" : [
{ <category-1> : {some Object which i know how to define schema} },
{ <category-2> : {some Object which i know how to define schema} }
],
"config2" : {some other structure}
}这里,范畴-n是在包含类别的n元素集合中定义的范畴.
我知道模式定义了静态数据结构,因此我们不能枚举键(对吗?)因此,作为一项工作,我需要如下所示的config1
"config1" : [
{ "categoryName" : "category-1"
"categoryPayload" : {some Object which i know how to define schema} },
{ "categoryName" : "category-2"
"categoryPayload" : {some Object which i know how to define schema} }
]对于每个类别定义,我知道我可以使用类似于"enum":“分类-1”,“类别-1”的,但问题是,在第一个json中,我从json建议中得到了不使用重复键的好处。每个类别都是独一无二的,我不希望有人对同一个类别使用不同的categoryPayload。如何将config-1的数组元素限制为每个类别只有一个元素(没有重复的类别元素)
编辑-1
以我的派生方法(使用类别作为值而不是键)为例,假设类别-1、类别-2和类别-3是允许的类别。因此,下面的json应该通过验证。
{
"config-1": [
{
"categoryName": "category-1", //line-1
"categoryPayload": {
"key1": "value1",
"key2": "value2"
}
},
{
"categoryName": "category-2", //line-2
"categoryPayload": {
"key1": "value1",
"key3": "value3"
}
}
],
"config-2": "something"
}如果将第1行替换为类别2(第1行和第2行都有相同的值),那么验证就会失败。显然,如果我在第1行替换了第7类(不是允许枚举的一部分),它也会失败。
发布于 2020-07-07 08:18:39
每个类别的架构是否从来都不是相同的?不能断言对象值的唯一性,而只能断言其模式的唯一性。
{
"type": "object",
"properties": {
"config1": {
"type": "array",
"items": {
"type": "object",
"patternProperties": {
"\\w+": {
"oneOf": [
{"type": "object", "properties": {"a": {}}, "additionalProperties": false},
{"type": "object", "properties": {"b": {}}, "additionalProperties": false}
]
}
},
"additionalProperties": false
}
}
}
}更新:这是另一种方式:
{
"type": "object",
"properties": {
"config1": {
"type": "array",
"items": [
{"type": "array", "items": {"type": "string"}, "uniqueItems": true},
{"type": "array", "items": {"type": "object"}, "uniqueItems": true},
]
}
}
}这样,您就可以拥有唯一的键和值。然后在应用程序中压缩两个数组。
这是通过的:
{
"config1" : [
["category-1", "category-2"],
[{"a": 1}, {"a": 2}]
]
}这是失败的:
{
"config1" : [
["category-1", "category-2"],
[{"a": 1}, {"a": 1}]
]
}https://stackoverflow.com/questions/62770180
复制相似问题