So definieren Sie eine JSON-schema, das ist zumindest eine von vielen Eigenschaften
Ich würde gerne wissen, ob ich es definieren kann, ein JSON-schema (draft 4), erfordert zumindest eine von vielen Eigenschaften kann ein Objekt. Ich weiß schon, der allOf
, anyOf
und oneOf
aber kann nicht herausfinden, wie man Sie in der Art, wie ich will.
Hier sind einige Beispiel-JSON zu veranschaulichen :
//Test Data 1 - Should pass
{
"email": "[email protected]",
"name": "John Doe"
}
//Test Data 2 - Should pass
{
"id": 1,
"name": "Jane Doe"
}
//Test Data 3 - Should pass
{
"id": 1,
"email": "[email protected]",
"name": "John Smith"
}
//Test Data 4 - Should fail, invalid email
{
"id": 1,
"email": "thisIsNotAnEmail",
"name": "John Smith"
}
//Test Data 5 - Should fail, missing one of required properties
{
"name": "John Doe"
}
Ich möchte, benötigen Sie mindestens id
oder email
(akzeptieren auch beide) und noch Gültigkeitsprüfung nach format. Mit oneOf
Validierung fehlschlägt, wenn ich die beiden (test 3), anyOf
Validierung weiterleitet, auch wenn einer von Ihnen ist nicht gültig (test 4)
Hier ist mein schema :
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "https://example.com",
"properties": {
"name": {
"type": "string"
}
},
"anyOf": [
{
"properties": {
"email": {
"type": "string",
"format": "email"
}
}
},
{
"properties": {
"id": {
"type": "integer"
}
}
}
]
}
Können Sie mir helfen, wie das zu erreichen ist die richtige Validierung für meinen Anwendungsfall ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erfordern mindestens eine aus einer Reihe von Eigenschaften, die Verwendung
required
in einer Reihe vonanyOf
Optionen:Wenn eine der Eigenschaften, die Sie wollen, vorhanden ist (
"id"
,"email"
), dann übergibt Sie die entsprechende option inallOf
.Können Sie verwenden
minProperties: number
(undmaxProperties: number
wenn nötig).Das würde verkürzen die schema-definition:
Link zur Dokumentation: https://json-schema.org/understanding-json-schema/reference/object.html#size
{ "foo": "bar" }
überprüft, ob Sie gegen{ "type": "object", "minProperties": 1, "properties": { "test": { "type": "string" }, "bar": { "type": "string" } } }
."additionalProperties": false
dann?