2011-02-18 21 views
6

Basit JSON şemaları yazıyordum ama biraz daha karmaşık bir API giriş çağrısı yaptım. Ben JSON 3 çok farklı türde alabilir bir dinlendirici uç rota:Diğer anahtarlara bağımlılıkları olan daha karmaşık json şemaları yazma

localhost/foo

alabilir:

{ "type": "ice_cream", "koni": "waffle" ...}

veya

{ "type": "hot_dog", "topuz": "buğday" ...}

"tip" anahtar "ice_cream" içeriyorsa, sadece Hiç anahtar "koni görmek istiyorum "ve" çörek "anahtar değil. "Type" "hot_dog" içeriyorsa, sadece "topuz" ve "koni" yi görmek istemiyorum. Sadece "ice_cream" türünü gördüğümden veya "hot_dog" yazdığından emin olmak için eşleme yapabildiğimi biliyorum, ancak bu anahtarın bu değere ayarlanması durumunda diğer bazı alanların gereksinimini nasıl zorlayacağımı bilmiyorum. Görüyorum ki "bağımlılık" adı verilen bir json şema alanı var ama nasıl kullanacağına dair iyi bir örnek bulamadım.

BTW, JSON bu girişin iyi bir biçim olup olmadığından emin değilim (etkin bir şekilde JSON yapısının türünü aşırı yükler), ancak api'yi değiştirme seçeneğim yoktur. çünkü

{ 
    "description" : "Food", 
    "type" : [ 
     { 
      "type" : "object", 
      "additionalProperties" : false, 
      "properties" : { 
       "type" : { 
        "type" : "string", 
        "required" : true, 
        "enum": [ 
         "hot_dog" 
        ] 
       }, 
       "bun" : { 
        "type" : "string", 
        "required" : true 
       }, 
       "ketchup" : { 
        "type" : "string", 
        "required" : true 
       } 
      } 
     }, 
     { 
      "type" : "object", 
      "additionalProperties" : false, 
      "properties" : { 
       "type" : { 
        "type" : "string", 
        "required" : true, 
        "enum": [ 
         "ice_cream" 
        ] 
       }, 
       "cone" : { 
        "type" : "string", 
        "required" : true 
       }, 
       "chocolate_sauce" : { 
        "type" : "string", 
        "required" : true 
       } 
      } 
     } 
    ] 
} 

hala bu geçerli bir JSON olup olmadığından emin değilim: -

+0

Bunun eski bir soru olduğunu biliyorum, ama sadece şunu söyleyebilirim ki, v5 * 'in bir ['' '' ']' i (https://github.com/json-schema/json-schema/wiki/ tam olarak istediğiniz şeyi yapan anahtar kelime% 28v5-teklif% 29). Gerçek taslağı beklememiz gerekecek ... – cloudfeet

cevap

3

nihayet bu konuda bazı bilgiler var bunu şöyle geçerlidir birkaç farklı nesnelerin bir birlik yapabilirsiniz çıkıyor Schemavalidator'ım bazı geçersiz girişlerde öldü, ancak geçerli girişi beklendiği gibi kabul ediyor.

İlgili konular