2013-07-09 11 views
8

Wprowadziliśmy walidację schematu json (za pomocą newtonsoft) na naszej warstwie odpoczynku. To naprawdę robi różnicę, ale mam pytanie o możliwość i jak.sprawdzanie poprawności schematu json. Jak mogę zaakceptować tablicę lub wartość zerową?

Dla określonej właściwości, następujące jest prawidłowy (według właściciela produkt):

.... wybory: [] .......

.... wybory: [ "hello", "świat"]

.... wyborów: null .....

Oto stopniała przykładem definicji schematu json

{ 
    'description': 'myDescription', 
    'type': 'object', 
    'properties': 
    { 
    'name': {'type':'string', 'required': true}, 
    'description': {'type':'string'}, 
    'choices': {'type': 'array', 
     'items': {'type': 'string'}} 
} 

Oczywiście pierwsze 2 przykłady przechodzą proces sprawdzania poprawności, ale drugi z nich kończy się błędem "oczekiwano tablicy".

Właściwość jest opcjonalna.

Na marginesie, jeśli ktoś ma dobry link do pełnego zestawu dokumentacji na temat definicji schematów Json, chciałbym go zdobyć. Nie znalazłem dobrego pojedynczego źródła, ale jestem pewien, że istnieje.

Dziękuję.

-r

Odpowiedz

14

Można określić tablicę możliwych typów, takich jak;

"myProperty": { "type": [ "array", "null" ], "required":false } 

Json przejdzie sprawdzanie poprawności, jeśli "myProperty" jest dowolnego typu w tablicy typów. Ustawiłem wymagane na false, ponieważ powiedziałeś, że jest to opcjonalna właściwość, która spowoduje, że przejdzie tylko, jeśli właściwość nie jest obecna w jsonie. Jeśli musisz ustawić wartość false, a właściwość jest w jsonie, ale niewłaściwego typu, sprawdzanie poprawności zakończy się niepowodzeniem.

To są najlepsze dokumenty na temat schematów JSON, które znam; http://json-schema.org/latest/json-schema-validation.html Witryna nie zawiera użytecznych przykładów, ale wszelkie szczegóły, których potrzebujesz, znajdują się w dokumentach.

+0

Dziękuję. To rozwiązało problem. Odkryłem również "type": "any", który był również użyteczny w niektórych naszych właściwościach, gdzie typ był zależny od innych atrybutów ładunku. –

+0

W dalszym badaniu go znalazłem to, co było pomocne i miało kilka lepszych przykładów: http://tools.ietf.org/html/draft-zyp-json-schema-03 –

+0

@RogerJoys tak, patrzyłem na to. Jeśli opublikujesz inne pytania dotyczące jsonów na SO, prawdopodobnie odpowiem na nie. Są dość niewykorzystane, więc nie ma na nich zbyt wiele informacji, ale używam ich trochę, więc znam przynajmniej wszystkie podstawy i kilka innych sztuczek. – evanmcdonnal

1

Czy próbowałeś dokonywania wartość domyślna dla choices być []?

Przyjmuję, ponieważ powiedziałeś, że właściwość jest opcjonalna, że ​​używasz opcjonalnej składni parametru w C# lub czy jestem niepoprawny?

Powiązane problemy