2016-08-07 12 views
0

Hallo Kollege stackoverflowers!JSON Schema: benötigt mindestens ein nicht-positionelles Array-Element

Ich habe ein 'Problem' mit JSON-Schema-Code und Validierung von JSON-Arrays. Mein Problem ist, dass ich mindestens ein Element in einem Array benötige, um ein bestimmtes Schema einzuhalten, aber die restlichen Elemente können frei formatiert sein. Ich kann nicht davon ausgehen, dass sich mein gesuchtes Element in einer bestimmten Position des Arrays befindet. Nur mit ganzen Zahlen (der Einfachheit halber) kann das Problem umformuliert werden zu: "Schreibe ein Schema, das bestätigt, dass es mindestens eine 1 in dem Array gibt, unabhängig von seiner Position". Positive Beispiele wären:

[1] 
[0, 0, 1] 
["a", true, null, 1, false, null, 3.2] 
[1, 1, 1, 1] 

Negative Beispiele seien:

[] 
["a"] 
[0, 2, 4] 

Mit der Dokumentation bei json-schema.org (Draft 04) und dem Spiel mit den JSON Schema Validator ich mit meiner eigenen Lösung kam die doppelte Negation verwendet und fühlt sich recht umständlich:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "testid", 
    "title": "test array schema", 

    "not": { 
    "items": 
     { 
     "not": { "enum": [1] } 
     } 
    } 
} 

Es nutzt das Prinzip „nicht (für-alle-Artikel (nicht 1 ist))“, der arbeitet, fühlt sich aber nicht sehr e Legat. Gibt es so etwas wie eine "Anforderung" für Arrays, die ich vermisst habe?

Danke für die Rückmeldung!

Antwort

0

Sie verpassen nichts. Sie können ein Schema für alle Elemente angeben oder Sie können ein Schema für jeden Index angeben. Das ist alles, womit Sie arbeiten müssen.

Es gibt einen Vorschlag für ein contains Schlüsselwort für Entwurf 05, aber der Fortschritt auf Entwurf 05 ist seit einiger Zeit ins Stocken geraten. Das Schema, das Sie haben, ist das Beste, was Sie mit Entwurf 04 tun können.

+0

Ehrfürchtig, danke Jason! Der Link, den Sie angegeben haben, war sehr hilfreich. Ich habe den Vorschlag für Entwurf 05 nicht gefunden, als ich nach der Lösung gesucht habe, und tatsächlich ist das vorgeschlagene 'contains'-Schlüsselwort das, nach dem ich gesucht habe.So ist die Lösung, um ein eleganteres Schema zu erhalten, das 'contains' verwendet : warten. – TheRealISA