Схема JSON, соединяющая массивы со свойствами - PullRequest
0 голосов
/ 16 ноября 2018

Меня попросили создать JSON-схему с типом файла "zfs", содержащим пулы свойств массива, где каждый элемент такого массива должен иметь свойства: имя (строка), тома (массив строк), 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 голосов
/ 16 ноября 2018

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-схеме вам нужно как-то определить схему содержимого / items в массиве (если вы хотите проверить соответствие элементов массива JSON на соответствие JSON-схеме). Вы можете сделать это с ключевым словом "items" и с использованием синтаксиса кортежа (если важна последовательность элементов в массиве) или в виде массива объектов, где последовательность не имеет значения, но каждый объект должен соответствовать определенной схеме , Да, вы можете иметь даже массив различных типов объектов, если вам нужно.

Пожалуйста, прочитайте: https://json -schema.org / понимание-json-схема / ссылка / массив.html

и спецификация для https://json -schema.org / latest / json-schema-validation.html # rfc.section.6.4

Надеюсь, это помогло.

...