2015-06-16 8 views
15

dziedzinie required w JSON Schema

JSON Schema wyposażony pola properties, required i additionalProperties. Na przykład,JSON Schema - wymagają wszystkie właściwości

{ 
    "type": "object", 
    "properties": { 
     "elephant": {"type": "string"}, 
     "giraffe": {"type": "string"}, 
     "polarBear": {"type": "string"} 
    }, 
    "required": [ 
     "elephant", 
     "giraffe", 
     "polarBear" 
    ], 
    "additionalProperties": false 
} 

zweryfikuje obiekty JSON, takich jak:

{ 
    "elephant": "Johnny", 
    "giraffe": "Jimmy", 
    "polarBear": "George" 
} 

Ale nie powiedzie się, jeśli lista właściwości nie jest dokładnieelephant, giraffe, polarBear.

Problem

często skopiować i wkleić listę properties do listy required i cierpią z irytujących błędów, gdy wykazy nie są zgodne z powodu literówek i innych błędów głupie.

Czy istnieje krótszy sposób oznaczenia, że ​​wszystkie właściwości są wymagane, bez wyraźnego nazywania ich?

+2

Byłoby miło, gdyby specyfikacja schematu JSON obsługiwała '" wymagany ": true', gdzie boolean zastępuje zwykłą tablicę. – rcrogers

Odpowiedz

16

Możesz po prostu użyć właściwości "minProperties" zamiast explicity nazywać wszystkie pola.

{ 
    "type": "object", 
    "properties": { 
     "elephant": {"type": "string"}, 
     "giraffe": {"type": "string"}, 
     "polarBear": {"type": "string"} 
    }, 
    "additionalProperties": false, 
    "minProperties": 3 
} 
+0

Najlepsze podejście do tej pory. –

+1

Dzięki, działa to świetnie. Należy jednak pamiętać, że zależy to od specyfikacji: "additionalProperties": false ' Jeśli additionalProperties jest prawdziwe według specyfikacji lub domyślnie (jeśli nieokreślone), to ograniczenie minProperties może zostać spełnione przez dodatkową właściwość, która to _nie_ jeden z podanych w twoim obiekcie schematu. – yokeho

+0

Komunikat o błędzie jest mniej przydatny w ten sposób. Wiesz, że tracisz nieruchomość, ale musisz dowiedzieć się, która z nich. Mimo to za każdym razem kopiuje wszystkie właściwości. – Memetic

5

Wątpię, czy istnieje sposób określenia wymaganych właściwości innych niż jawnie nazwij je w wymaganej tablicy.

Ale jeśli napotkasz ten problem bardzo często, proponuję napisać mały skrypt, który będzie przetwarzał twój json-schema i automatycznie doda wymaganą tablicę dla wszystkich zdefiniowanych obiektów.

Skrypt wystarczy przejść przez drzewo json-schema, a na każdym poziomie, jeśli znajduje się słowo kluczowe "właściwości", dodaj "wymagane" słowo kluczowe ze wszystkimi zdefiniowanymi kluczami zawartymi we właściwościach na tym samym poziomie.

Pozwól, aby maszyny zrobiły odwierty.

0

zrobić to w kodzie z jedną wkładką, na przykład, jeśli chcę użyć required dla insert w DB, ale tylko chcą zweryfikować przeciwko schematu podczas wykonywania update.

Powiązane problemy