JSON模式将数组与属性连接

时间:2018-11-16 08:02:45

标签: json jsonschema

我被要求使用包含数组属性池的文件类型“ 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错误,即使我知道该错误意味着什么,我也不知道如何处理它才能使其正常工作。

1 个答案:

答案 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的规范

希望有帮助。