Укажите значение может быть строкой или нулем с помощью схемы JSON

Надеюсь, это не очевидно для других, потому что я нахожу документы по адресу https://json-schema.org/ быть лишенным более мелких деталей. Я получаю блок JSON с некоторыми свойствами, которые могут быть null или string. Как указать в схеме JSON (для анализа методом JsonSchema.Parse Json.NET), что значение может иметь тип null или тип string?

Есть ли что-то простое, что мне не хватает, например, предоставление массива для типа? Например;

"member_region": { "type": [ "string", null ] } // this throws an exception

Кроме того, есть ли у кого-нибудь лучший источник деталей схемы JSON, чем json-schema.org? Где я могу найти более широкий выбор примеров? Я не хочу читать большой документ / спецификацию, чтобы найти что-то, что можно легко продемонстрировать на примере из 10 строк.


person evanmcdonnal    schedule 26.04.2013    source источник


Ответы (3)


Из http://json-schema.org/latest/json-schema-validation.html#anchor79

Значение этого ключевого слова ДОЛЖНО быть строкой или массивом. Если это массив, элементы массива ДОЛЖНЫ быть строками и ДОЛЖНЫ быть уникальными.

Строковые значения ДОЛЖНЫ быть одним из семи примитивных типов, определенных базовой спецификацией.

Затем мы ссылаемся на типы: http://json-schema.org/latest/json-schema-core.html#anchor8

В нем перечислены строки и ноль. Пытаться:

"member_region": { "type": ["string", "null"] }
person Explosion Pills    schedule 26.04.2013
comment
"string, null" не работает, но [ "string", "null" ] работает. - person Andrew Arnott; 29.08.2020
comment
Похоже, кто-то изменил этот ответ около года назад. Я вернул правильный ответ. - person Jason Desrosiers; 31.08.2020
comment
Это обновленная ссылка на местоположение в текущей спецификации: ‹json-schema.org/draft/2020-12/ - person Demitri; 27.03.2021

Расширение ответа от Explosion Pills, если вы выберете синтаксис массива:

"member_region": { "type": [ "string", "null" ] } // this works

потому что вы указываете тип, а не пример / значение. Вы не должны идти на:

 "member_region": { "type": [ "string", null ] } // this throws an exception
person zardilior    schedule 21.06.2019
comment
Это единственное решение, которое работает со схемами для приложений логики Azure. - person EricksonG; 05.08.2019
comment
Это решение также распознается Visual Studio Code. - person ivosh; 08.11.2019

[string, null] будет работать, если вы не используете шаблон RegEx.

Я использую валидатор поля даты:

    (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d 

чтобы разрешить шаблон MM / dd / yyyy, но он выдаст ошибку несоответствия в пустой строке ()

person TheWizardOfTN    schedule 30.04.2021
comment
Пустая строка не эквивалентна null в JSON. - person Jason Desrosiers; 30.04.2021
comment
На самом деле я исправил это следующим образом: ((0 [1-9] | 1 [012]) [- /.] (0 [1-9] | [12] [0-9] | 3 [01]) [ - /. посетителей(19|20)\\d\\d) *? - person TheWizardOfTN; 01.05.2021