Json 需要数组中的特定项
我有以下Json 需要数组中的特定项,json,jsonschema,Json,Jsonschema,我有以下json对象: { "my_items": [ { "a": "primary", n: 1 }, { "b": "secondary", n: 2 }, { "b": "secondary", n: 3 } ] } my_items列表中的所有项目都应该是唯一的。现在,我需要使用以下规则验证整个json对象: 它可以包含零个或多个带有“type”:“secondary”,但绝对必须包含一个且仅包含一个带有“type”:“primary” 如何使用最新版
json
对象:
{
"my_items": [
{ "a": "primary", n: 1 },
{ "b": "secondary", n: 2 },
{ "b": "secondary", n: 3 }
]
}
my_items
列表中的所有项目都应该是唯一的。现在,我需要使用以下规则验证整个json
对象:
它可以包含零个或多个带有“type”:“secondary”
,但绝对必须包含一个且仅包含一个带有“type”:“primary”
如何使用最新版本来表达这一点
我想到了:
但测试失败,出现以下错误:
Invalid: data.my_items[0] should NOT have additional properties, data.my_items[1] should NOT have additional properties, data.my_items[2] should NOT have additional properties
在JSON模式中,无法断言数组包含且仅包含某个内容中的一个。你可以断言至少有一个,但这是你能做的最好的。最接近的方法是要求主_项是数组中的第一个元素
{
"type": "object",
"properties": {
"my_items": {
"type": "array",
"items": [
{"$ref": "#/definitions/primary_item"}
],
"additionalItems": {"$ref": "#/definitions/secondary_item"}
}
},
"additionalProperties": false,
"definitions": {
"primary_item": {
"type": "object",
"properties": {
"a": { "enum":["primary"] }
},
"additionalProperties": false
},
"secondary_item": {
"type": "object",
"properties": {
"b": { "enum":["secondary"] }
},
"additionalProperties": false
}
}
}
编辑
回应评论
我想知道是否可以用两个概念来表达一个和唯一一个:至少一个
+唯一的
对。如果数组项是唯一的,则可以执行以下操作
{
"type": "object",
"properties": {
"my_items": {
"type": "array",
"items": { "$ref": "#/definitions/my_item" },
"allOf": [{"$ref": "#/definitions/contains_primary_item"}],
"uniqueItems": true
}
},
"additionalProperties": false,
"definitions": {
"my_item": {
"type": "object",
"properties": {
"a": { "type": "string" }
},
"additionalProperties": false
},
"primary_item": {
"type": "object",
"properties": {
"a": { "enum":["primary"] }
},
"additionalProperties": false
},
"contains_primary_item": {
"not": {
"items": {
"not": { "$ref": "#/definitions/primary_item" }
}
}
}
}
}
在JSON模式中,无法断言数组包含且仅包含某个内容中的一个。你可以断言至少有一个,但这是你能做的最好的。最接近的方法是要求主_项是数组中的第一个元素
{
"type": "object",
"properties": {
"my_items": {
"type": "array",
"items": [
{"$ref": "#/definitions/primary_item"}
],
"additionalItems": {"$ref": "#/definitions/secondary_item"}
}
},
"additionalProperties": false,
"definitions": {
"primary_item": {
"type": "object",
"properties": {
"a": { "enum":["primary"] }
},
"additionalProperties": false
},
"secondary_item": {
"type": "object",
"properties": {
"b": { "enum":["secondary"] }
},
"additionalProperties": false
}
}
}
编辑
回应评论
我想知道是否可以用两个概念来表达一个和唯一一个:至少一个
+唯一的
对。如果数组项是唯一的,则可以执行以下操作
{
"type": "object",
"properties": {
"my_items": {
"type": "array",
"items": { "$ref": "#/definitions/my_item" },
"allOf": [{"$ref": "#/definitions/contains_primary_item"}],
"uniqueItems": true
}
},
"additionalProperties": false,
"definitions": {
"my_item": {
"type": "object",
"properties": {
"a": { "type": "string" }
},
"additionalProperties": false
},
"primary_item": {
"type": "object",
"properties": {
"a": { "enum":["primary"] }
},
"additionalProperties": false
},
"contains_primary_item": {
"not": {
"items": {
"not": { "$ref": "#/definitions/primary_item" }
}
}
}
}
}
我想知道是否只有一个可以用两个概念来表达:至少一个
+唯一的
。你怎么认为?事实上,我认为列表中的所有对象都是唯一的(而我的示例暗示我可能有重复的对象,这不是真的;我已经更新了这个问题)。我想知道是否可以使用两个概念来表示一个对象,并且只有一个对象:至少一个+唯一的。你怎么认为?事实上,我认为列表中的所有对象都是唯一的(而我的示例暗示我可能有重复的对象,这不是真的;我已经更新了问题)。