2016-07-20 11 views
2

Für das gegebene Schema unten nicht leer ist, ist es möglich, zumindest eine Eigenschaft einen Wert enthält, um sicherzustellen, dass (dh minLength 1):Stellen Sie sicher, eine Eigenschaft ist in JSON Schema

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
     "fundRaiseId": { 
      "type": "string" 
     }, 
     "productTypeId": { 
      "type": "string" 
     }, 
     "businessLineId": { 
      "type": "string" 
     } 
    } 
} 

dies würde also passieren Validierung:

{ 
"fundRaiseId": "x" 
} 

Und dies würde scheitern, da keine Werte vorhanden sind:

{ 
    "fundRaiseId": "", 
    "productTypeId": "", 
    "businessLineId": "" 
} 

Antwort

2

würde ich versuchen, so etwas wie

{ 
    "allOf": [{ 
     "type": "object", 
     "properties": { 
      "fundRaiseId": { 
       "type": "string" 
      }, 
      "productTypeId": { 
       "type": "string" 
      }, 
      "businessLineId": { 
       "type": "string" 
      } 
     } 
    }, { 
     "anyOf": [{ 
      "properties": { 
       "fundRaiseId": { 
        "$ref": "#/definitions/nonEmptyString" 
       } 
      } 
     }, { 
      "properties": { 
       "productTypeId": { 
        "$ref": "#/definitions/nonEmptyString" 
       } 
      } 
     }, { 
      "properties": { 
       "businessLineId": { 
        "$ref": "#/definitions/nonEmptyString" 
       } 
      } 
     }] 
    }], 
    "definitions": { 
     "nonEmptyString": { 
      "type": "string", 
      "minLength": 1 
     } 
    } 
} 

Erläuterung: die JSON validiert werden soll, um 2 auf Stammebene Schema entspricht, eine ursprüngliche Definition (3 String-Eigenschaften). Die andere enthält 3 zusätzliche Unterschemata, die jeweils eine Ihrer ursprünglichen Eigenschaften als nicht leere Zeichenfolge definieren. Diese sind in ein "AnyOf" -Schema verpackt, so dass mindestens eine von diesen übereinstimmen sollte, plus das ursprüngliche Schema.

+0

Tolle Idee, aber ist das folgende gültig gegen das Schema '{}' während ich mindestens eine Eigenschaft benötigen einen Wert enthalten, wie Sie in Ihrer Definition von 'nonEmptyString' definiert haben – Ric

+0

dann die Bestimmungen haften Subschemata ändern zu z. '{ "Eigenschaften": { "fundRaiseId": { "$ ref": "#/Definitionen/nonEmptyString" } }, "erforderlich": [ "fundRaiseId"] }' (so verwenden die "erforderliches" Schlüsselwort) – erosb

+0

Nur ein paar Dinge versuchen und ein Update geben. – Ric

2

Ist es eine Voraussetzung, dass die Werte leer bleiben? Sie können ein viel saubereres Schema schreiben, wenn Sie verlangen, dass alle Zeichenfolgen nicht leer sind.

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
     "fundRaiseId": { "$ref": "#/definitions/non-empty-string" }, 
     "productTypeId": { "$ref": "#/definitions/non-empty-string" }, 
     "businessLineId": { "$ref": "#/definitions/non-empty-string" } 
    }, 
    "anyOf": [ 
     { "required": ["fundRaiseId"] }, 
     { "required": ["productTypeId"] }, 
     { "required": ["businessLineId"] } 
    ], 
    "definitions": { 
     "non-empty-string": { 
      "type": "string", 
      "minLength": 1 
     }, 
    } 
} 
Verwandte Themen