Как указать значения по умолчанию с помощью JSON Schema - PullRequest
0 голосов
/ 25 октября 2018

У меня есть поле статус .

Если пользователь устанавливает задание в качестве чернового состояния, я не хочу запрашивать поле описания - но я хочу, чтобы по умолчанию была пустая строка.

Если пользовательпубликация задания, для которого требуется описание.

Я не могу понять, как в массиве "oneOf - draft" установить значение по умолчанию для описания.

Вот моя схема

{
  "schema": "http://json-schema.org/draft-04/schema#",
  "$id": "http://company.com/schemas/job-update.json#",
  "title": "Job",
  "description": "Update job",
  "type": "object",
  "properties": {
    "title": { 
      "type": "string",
      "minLength": 2
    },
    "description": { 
      "type": "string"
     // Can't set default here - as it will apply for the publish status.
    },    
    "status": { 
      "enum": ["draft", "published", "onhold"],
      "default": "draft"
    }
  },
  "oneOf": [
        {
          "description": "Draft jobs do not require any validation",
          "properties": {
            "status": { "enum": ["draft"]}
          },
          "required": [] 
          // SOME WHERE HERE SET DESCRIPTION.default: ""         
        },
        {
          "description": "Published jobs require validation on required fields",
          "properties": {
            "status": { "enum": ["published"]}
          },
          "required": [
            "description"
          ], 
        }        
  ],
  "additionalProperties": false
}

1 Ответ

0 голосов
/ 26 октября 2018

К сожалению, это невозможно при использовании чистой схемы JSON.

Проверка схемы JSON не изменяет данные экземпляра.

Ключевое слово default в схеме JSON является ключевым словом аннотации,Ключевые слова аннотации используются для обозначения информации, однако они не имеют требований к валидации.

Черновик-7 (текущий) гласит следующее:

На значение не накладываются никакие ограниченияэтого ключевого слова.Когда несколько вхождений этого ключевого слова применимы к одному подэкземпляру, реализации ДОЛЖНЫ удалять дубликаты.

Это ключевое слово может использоваться для предоставления значения JSON по умолчанию, связанного с конкретной схемой.РЕКОМЕНДУЕТСЯ, чтобы значение по умолчанию было действительным для связанной схемы.

https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-10.2

Нет определенного поведения, связанного с ключевыми словами аннотации.

Помнитеосновной сценарий использования схемы JSON - это определение, проверка и аннотация.

ОДНАКО ...

Если вас не беспокоит переносимость ваших схем, ajv *Реализация 1026 * позволяет использовать значение default для установки ключа во время проверки, но это поведение не определяется схемой JSON.

...