我有以下架构,其中数组values
只接受value
类型的对象。我正在使用Newtonsoft.Json v11.0.2进行验证。
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://some.thing/json",
"type": "object",
"definitions": {
"value": {
"$id": "/definitions/value",
"required": ["a", "b", "c"],
"properties": {
"a": {
"$id": "/properties/value/a",
"type": "string"
},
"b": {
"$id": "/properties/value/b",
"type": "string"
},
"c": {
"$id": "/properties/value/c",
"type": "string"
}
}
}
},
"required": ["values"],
"properties": {
"values": {
"$id": "/properties/values",
"type": "array",
"items":
{
"$id": "/properties/values/item",
"$ref": "/definitions/value"
},
"uniqueItems": true
}
}
}
这有效,因为它不会验证类似
的内容{
"values": [
{
"a": "a2",
"b": "b2"
}
]
}
但确实
{
"values": [
{
"a": "a2",
"b": "b2",
"c": "c3"
},
"string"
]
}
它不应该。
如何强制只有value
可以在数组中? "additionalItems": false
限制了商品的数量,"additionalProperties": false
限制了"商品"似乎什么都不做,所以这些也不是我想要的。
答案 0 :(得分:1)
您正在尝试验证values数组的有效项,并且您的项目中的Object.preventExtensions()
defintinition只会影响对象。
您需要在值定义中添加"additionalProperties": false
...
"type": "object"