2017-10-27 42 views
7

:JSONSchema ve doğrulama alt nesne tercihleri ​​bu JSON nesnesi Verilen

{ 
    "objects": { 
     "foo": { 
      "id": 1, 
      "name": "Foo" 
     }, 
     "bar": { 
      "id": 2, 
      "name": "Bar" 
     } 
    } 
} 

Bu her alt nesne aynı yapıya sahiptir alt nesneler içeren bir nesnedir - hepsi aynı tipsin. Her bir alt nesne benzersiz olarak anahtarlanmıştır, bu yüzden adlandırılmış bir dizi gibi davranır.

objects özelliği içindeki her bir nesnenin bir JSON Şeması referansına göre geçerli olduğunu doğrulamak istiyorum.

objects özelliği gibi bir dizi ise: typearray çünkü

{ 
    "id": "my-schema", 
    "required": [ 
    "objects" 
    ], 
    "properties": { 
    "objects": { 
     "type": "array", 
     "items": { 
     "type": "object", 
     "required": [ 
      "id", 
      "name" 
     ], 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 

Bu elde edilir, ve:

{ 
    "objects": [ 
    { 
     "id": 1, 
     "name": "Foo" 
    }, 
    { 
     "id": 2, 
     "name": "Bar" 
    } 
    ] 
} 

bir şema tanımı gibi bu doğrulamak olabilir Bu, items'un doğrulanmasını sağlar.

Benzer bir şey yapmak mümkün mü, iç içe geçmiş nesnelerle mi?

Teşekkürler!

cevap

3

Böyle bir şey deneyebilirsiniz:

{ 
    "id": "my-schema", 
    "type": "object", 
    "properties": { 
    "objects": { 
     "type": "object", 
     "patternProperties": { 
     "[a-z]+": { 
      "type": "object", 
      "properties": { 
      "id": { 
       "type": "integer" 
      }, 
      "name": { 
       "type": "string" 
      } 
      }, 
      "additionalProperties": false, 
      "required": [ 
      "id", 
      "name" 
      ] 
     } 
     } 
    } 
    } 
} 
0

yukarıdaki cevap harfleri küçük harf için nesne özellik adlarını sınırlamak için çalışır. Ben çözer daha bu anahtar kelimeyi kullanarak daha fazla sorunlara neden bulmaları nedeniyle

{ 
    "id": "my-schema", 
    "type": "object", 
    "properties": { 
    "objects": { 
     "type": "object", 
     "additionalProperties": { 
     "type": "object", 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string    } 
      } 
     }, 
     "required": [ 
      "id", 
      "name" 
     ] 
     } 
    } 
    } 
} 

Yukarıda cevabını iç "additionalProperties": false atlanmış, ama bir şudur: özellik adlarını kısıtlamak gerekmez, o zaman bu basit "name" ve "id" dışındaki özellikler varsa, iç nesnelerde doğrulama işleminin başarısız olmasını istiyorsanız, anahtar kelimenin geçerli kullanımı.