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
dependenciesAnahtar kelime bir koşullu varyasyon requiredanahtar 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 requiredanahtar 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/0eşleşir ve doğrulama başarılı olur. "Foo" "bar" a eşitse, #/anyOf/0başarısız olur ve doğrulamanın başarılı #/anyOf/1olması 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 , thenve elseanahtar 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 enumve kullanmak için tekilleri güncelleme const.