Durumunuza bağlı olarak, birkaç farklı yaklaşım vardır. Bir alana şartlı olarak ihtiyaç duymanın dört farklı yolunu düşünebilirim.
Bağımlılıklar
dependencies
Anahtar kelime bir koşullu varyasyon required
anahtar kelime. Foreach özelliği dependencies
, doğrulanan JSON'da özellik mevcutsa, bu anahtarla ilişkili şema da geçerli olmalıdır. "Foo" özelliği mevcutsa, "bar" özelliği gereklidir
{
"type": "object",
"properties": {
"foo": { "type": "string" },
"bar": { "type": "string" }
},
"dependencies": {
"foo": { "required": ["bar"] }
}
}
Şema yalnızca required
anahtar kelimeyi içeriyorsa kısa bir form da vardır .
{
"type": "object",
"properties": {
"foo": { "type": "string" },
"bar": { "type": "string" }
},
"dependencies": {
"foo": ["bar"]
}
}
Ima
Koşulunuz bir alanın değerine bağlıysa, çıkarım adı verilen bir mantıksal mantık kavramı kullanabilirsiniz. "A, B'yi ima eder" etkin bir şekilde, eğer A doğruysa B'nin de doğru olması gerektiği anlamına gelir. Çıkarım aynı zamanda "! A veya B" olarak da ifade edilebilir. Ya "foo" özelliği "bar" a eşit değildir veya "bar" özelliği gereklidir . Veya başka bir deyişle: "foo" özelliği "bar" a eşitse, "bar" özelliği gerekir.
{
"type": "object",
"properties": {
"foo": { "type": "string" },
"bar": { "type": "string" }
},
"anyOf": [
{
"not": {
"properties": {
"foo": { "const": "bar" }
},
"required": ["foo"]
}
},
{ "required": ["bar"] }
]
}
"Foo" "bar" a eşit değilse, #/anyOf/0
eşleşir ve doğrulama başarılı olur. "Foo" "bar" a eşitse, #/anyOf/0
başarısız olur ve doğrulamanın başarılı #/anyOf/1
olması için geçerli olması gerekir anyOf
.
Sıralama
Koşulunuz bir enum'a dayanıyorsa, biraz daha basittir. "foo", "bar" veya "baz" olabilir. "Foo" "bar" a eşitse, "bar" gereklidir. "Foo" "baz" a eşitse, "baz" gereklidir.
{
"type": "object",
"properties": {
"foo": { "enum": ["bar", "baz"] },
"bar": { "type": "string" },
"baz": { "type": "string" }
},
"anyOf": [
{
"properties": {
"foo": { "const": "bar" }
},
"required": ["bar"]
},
{
"properties": {
"foo": { "const": "baz" }
},
"required": ["baz"]
}
]
}
If-Then-Else
JSON Şemasına nispeten yeni bir ekleme (taslak-07)if
, then
ve else
anahtar kelimelerini ekler . "Foo" özelliği "bar" a eşitse, "bar" özelliği gerekir
{
"type": "object",
"properties": {
"foo": { "type": "string" },
"bar": { "type": "string" }
},
"if": {
"properties": {
"foo": { "const": "bar" }
},
"required": ["foo"]
},
"then": { "required": ["bar"] }
}
DÜZENLEME 12/23/2017: Uygulama bölümü güncellendi ve If-Then-Else bölümü eklendi.
DÜZENLEME 06/04/2018: If-Then-Else için hata düzeltmesi enum
ve kullanmak için tekilleri güncelleme const
.