Возможно ли в схеме json определить ограничение между двумя свойствами

У меня есть два поля в моей схеме: одно является обязательным свойством под названием «имя», а другое является необязательным (используется для определения свойства сортировки) под названием «nameSort», и я хочу выразить

Если поле «nameSort» определено, поле «name» также должно быть определено как то же значение.

Можно ли выразить такое «межэлементное» ограничение с помощью схемы JSON? Я бегло прочитал схему JSON здесь http://json-schema.org/latest/json-schema-validation.html говорит "нет".


person kellyfj    schedule 12.01.2015    source источник


Ответы (2)


Вы можете указать, что одно свойство должно быть определено, когда присутствует другое, например:

{
    "type": "object",
    "dependencies": {
        "nameSort": ["name"]
    }
}

Однако нельзя указать, что два свойства должны иметь равные значения.

Кроме того, почему у вас вообще есть отдельная собственность, если она всегда будет равной? И если он всегда равен, не могли бы вы просто использовать логический флаг для уменьшения избыточности?

person cloudfeet    schedule 12.01.2015
comment
Спасибо за совет - это поможет! Да, это унаследованный код, и были приняты некоторые неудачные проектные решения, которые уже используются заказчиками :-( - person kellyfj; 12.01.2015
comment
Что это что это такое? Вы забыли, что можете просто "dependencies": { "p1": "p2" }? : p @kellyfj это будет работать как require свойства; однако, если вы хотите, чтобы у обоих было одно и то же ЗНАЧЕНИЕ, вам понадобится специальное ключевое слово, если вы можете себе это позволить. Теперь это зависит от библиотеки проверки, которую вы используете ... - person fge; 13.01.2015
comment
Ой, да, я разработал более сложные ограничения, а потом забыл об этом! Исправлено - спасибо. :) - person cloudfeet; 13.01.2015
comment
Примером использования для сравнения равенства значений может быть пара password и password-repeat. Так возможно ли это? - person Joshua Kifer; 25.12.2015
comment
Я вижу, что это предложение github.com/json- schema / json-schema / wiki / $ data- (v5-offer) может предоставить средства для этого. Этот проект поддерживает его github.com/acornejo/jjv - person Joshua Kifer; 25.12.2015

Старый вопрос, но теперь это можно сделать с помощью схемы json v5 / v6, используя комбинацию ключевых слов constant и $data (указатель JSON или относительный указатель JSON).

Пример:

"properties": {
    "password": { "type": "string" },
    "password_confirmation": { "const": { "$data": "1/password" } }
}

Где "1/password" - относительный указатель JSON, говорящий «поднимитесь на один уровень вверх, затем найдите ключевой пароль».

person Andrew    schedule 16.12.2016
comment
Схема JSON не поддерживает $data в черновике 07, хотя такие валидаторы, как AJV, поддерживают. См. github.com/json-schema-org/json-schema -spec / issues / 51 для получения дополнительной информации. - person neverendingqs; 27.03.2018
comment
Как и выше, это нестандартное ключевое слово и НЕ будет взаимодействовать между реализациями. - person Relequestual; 14.08.2018