2014-12-08 13 views
7

Ben örneğin belirli şartname ile iç içe nesnelerin herhangi bir sayıda içerebilir bir json nesnesi vardır:sözlük benzeri JSON şema

{ 
    "Bob": { 
    "age": "42", 
    "gender": "male" 
    }, 
    "Alice": { 
    "age": "37", 
    "gender": "female" 
    } 
} 

Ve böyle bir şey arayan bir şema istiyorum:

{ 
    "type": "object", 
    "propertySchema": { 
    "type": "object", 
    "required": [ 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

Bunu diziye çevirebileceğimi ve nesnelerin içine 'isim' basabileceğimi biliyorum. Bu durumda şema şunun gibi görünecektir:

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "required": [ 
     "name", 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "name": { 
     "type": "string" 
     }, 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

Ancak sözlük benzeri bir yapıya sahip olmak istiyorum. Böyle bir şema yapmak mümkün mü?

{ 
    "type" : "object", 
    "additionalProperties" : { 
     "type" : "object", 
     "required" : [ 
      "age", 
      "gender" 
     ], 
     "properties" : { 
      "age" : { 
       "type" : "string" 
      }, 
      "gender" : { 
       "type" : "string" 
      } 
     } 
    } 
} 

additionalProperties farklı anlamları olan şu değerlere sahip olabilir:

cevap

17

additionalProperties anahtar kelime olduğunu

  • "additionalProperties": false Artık özellikleri hiç izin verilir.
  • "additionalProperties": true Daha fazla özellik kullanımına izin verilir. Bu varsayılan davranıştır. Belirtilen türden bir değere sahiplerse (burada "dize"), ek özelliklerin (isteğe bağlı adın) eklenmesine izin verilir.
  • "additionalProperties": {*any schema*} Ek özellikler, yukarıda sağlanan örnek gibi sağlanan şemayı sağlamalıdır.
+0

Güzel yanıt için teşekkürler. "EkPropertiler" in farklı anlamlarını açıklayan birkaç satır ekledim. –

+0

Cevabınızı arttırmak için teşekkürler @JanVlcinsky (kod alıntıları için başlıkları kullanmak benim için biraz fazla gibi görünüyor). – jruizaranguren

+0

Tercih ettiğiniz şekilde düzenlemek için çekinmeyin. Seni haberdar etmemin sebebi buydu. Genellikle anahtar bilgileri daha görsel bir şekilde sunmak için üstbilgileri kullanırım, ancak bazen çok fazla hissedebilir, katılıyorum. –