JSON-Schema anyOf Validierung basierend auf einer der Eigenschaften

Ich habe Schwierigkeiten herauszufinden, wie ich ein Array von Objekten basierend auf dem Wert einer der Eigenschaften validieren kann. Also, wo ich ein JSON-Objekt habe wie:

{
    "items": [
        {
            "name": "foo",
            "otherProperty": "bar"
        },
        {
            "name": "foo2",
            "otherProperty2": "baz",
            "otherProperty3": "baz2"
        },
        {
            "name": "imInvalid"
        }
    ]
}

Ich würde gerne sagen, das

items kann anyOf-Objekte enthalten, wobei name "foo" oder "foo2" sein kannwenn es "foo" ist, ist die einzige gültige andere Eigenschaft (erforderlich) "otherProperty"wenn der Name "foo2" ist, sind die einzig gültigen anderen Eigenschaften "otherProperty2" und "otherProperty3" erforderlich.Kein anderer Wert für "name" als "foo" und "foo2" ist gültigDie Objekte selbst sind im Array items optional und einige werden möglicherweise wiederholt.

Ich habe alle möglichen Dinge ausprobiert, aber bei der Validierung kann ich anscheinend keinen Fehler feststellen. Beispielsweise sollte der Name "imInvalid" einen Überprüfungsfehler verursachen. Dies ist meine neueste Iteration des Schemas. Was vermisse ich

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": ["items"],
    "properties": {
        "items": {
            "type": "array",
            "minItems": 1,
            "additionalProperties": false,
            "properties": {
                "name": {
                    "anyOf": [
                        {
                            "type": "object",
                            "required": ["name", "otherProperty"],
                            "additionalProperties": false,
                            "properties": {
                                "otherProperty": { "type": "string" },
                                "name": { "enum": [ "foo" ] }
                            }
                        },{
                            "type": "object",
                            "required": ["name", "otherProperty2", "otherProperty3" ],
                            "additionalProperties": false,
                            "properties": {
                                "otherProperty2": { "type": "string" },
                                "otherProperty3": { "type": "string" },
                                "name": { "enum": [ "foo2" ] }
                            }
                        }
                    ]
                }
            }
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage