Как добавить значения по умолчанию из JSON схемы в JSON документ в Java - PullRequest
0 голосов
/ 27 февраля 2020

Мне нужно проверить документ JSON И добавить значения по умолчанию, определенные в схеме, если значения отсутствуют в данном документе. Я использую networknt / json -schema-validator для проверки, но я не уверен, как go добавить значения по умолчанию. Есть ли способ сделать это, используя библиотеку выше или другой инструмент, который позволил бы мне сделать это?

1 Ответ

0 голосов
/ 28 февраля 2020

Нет определенного способа сделать это в JSON Schema.


Хотя в JSON Schema есть ключевое слово "default", оно в основном предназначено для пользовательского интерфейса использование, чтобы обеспечить начальное значение по умолчанию. Рассмотрим схему:

{ "type":"string", "minLength":1, "default":"" }

В этом случае значение таково: «когда я создаю экземпляр этой схемы, присваиваю ему начальное значение пустой строки.»

Во-первых, обратите внимание как этот документ по умолчанию все еще будет недействительным - он должен быть изменен пользователем, прежде чем он станет действительным. «По умолчанию» просто должно быть правильно сформировано JSON. Это обеспечивается потому, что в этом случае пустая строка лучше по умолчанию, чем пустой документ (который будет недействительным JSON).

Во-вторых, JSON Схема не предполагает, что это неопределенное значение совпадает с предоставленным значением по умолчанию. Заполнение неопределенных свойств значениями по умолчанию позволяет изменить значение экземпляра. Например, с учетом этой схемы:

{ "properties":
    "port": { "type":"number", "default": 80 }
}

Возможно, неопределенное свойство означает одно, но как только я создаю это свойство, по умолчанию оно должно равняться 80.

В-третьих, ключевое слово «по умолчанию» даже не применяется, если экземпляр не существует, так что ключевое слово может быть рассмотрено. Если вы пытаетесь заполнить свойства объекта, чтобы валидатор схемы JSON «увидел» ключевое слово «по умолчанию», он должен сначала применить экземпляр к схеме с таким ключевым словом.

Используя приведенную выше схему, если у вас есть экземпляр, подобный {}, валидатор никогда не встретит ключевое слово «default», потому что у экземпляра нет свойства «port», которое загружало бы подсхему, содержащую его. .


Мне не известна библиотека, которая может делать что-то похожее на то, что вы описываете.

Однако, если вы хотите написать одну, я бы предложил написать такую ​​схему, как это вместо этого:

{
  "default": {
    "port": 80
  },
  "properties": {
    "port": { "type":"integer" }
  }
}

Это сделает значение ключевого слова «default» доступным для валидатора, даже если свойство «port» отсутствует. Затем можно запрограммировать короткий скрипт, который объединяет любые отсутствующие свойства.

См. https://github.com/json-schema-org/json-schema-spec/issues/858 для аналогичного в JSON Отслежывателе проблем схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...