我被要求使用包含数组属性池的文件类型“ zfs”创建JSON模式,其中该数组的每个项目都必须具有以下属性:名称(字符串),卷(字符串数组),sizeInGB(从0开始的数字)到65536)和numberOfFiles(从0到4294967296的整数)。 我想出的代码看起来像这样,
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "zfs",
"type": "array",
"properties" : {
"names":{"type": "string"},
"volumes":{"type": "array"},
"properties" : {"type": "string"},
"sizeInGB":{
"type": "number",
"minimum": 0,
"maximum": 65536
},
"numberOfFiles":{
"type": "integer",
"minimum": 0,
"maximum": 4294967296
}
},
"required": [ "names", "numberOfFiles","sizeInGB","volumes"],
}
但是它会在验证时抛出EOF错误,即使我知道该错误意味着什么,我也不知道如何处理它才能使其正常工作。
答案 0 :(得分:0)
Maciek,您的架构可能存在问题。您定义:
"type" : "array",
"properties" : {
"names" : {...},
"volumes" : {
"type" : array"
},
"properties" : { ...}
}
我了解您想要一个
对象数组 每个对象都包含:名称和对象数组
我希望在JSON模式中将其表述为:
"type" : "array",
"items" : { <============ here
"type" : "object",
"properties" : {
"names" : {...},
"volumes" : {
"type" : array"
"items" : { <============ and here
"type" : "object",
"properties" : { ... }
}
},
},
}
在JSON模式中,您需要以某种方式定义数组中/项目的内容模式(如果要针对匹配的JSON模式验证JSON数组项)。您可以使用“ items” 关键字并使用元组语法(如果数组中的元素顺序很重要)或作为对象数组来执行此操作,其中顺序无关紧要,但是每个对象必须符合特定的条件模式。是的,如果需要,甚至可以包含一系列不同种类的对象。
请阅读:https://json-schema.org/understanding-json-schema/reference/array.html
和https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4的规范
希望有帮助。