web-dev-qa-db-fra.com

Exemple de schéma Json pour les objets oneOf

J'essaie de comprendre comment oneOf fonctionne en créant un schéma qui valide deux types d'objets différents. Par exemple une personne (prénom, nom, sport) et des véhicules (type, coût).

Voici quelques exemples d'objets:

{"firstName":"John", "lastName":"Doe", "sport": "football"}

{"vehicle":"car", "price":20000}

La question est de savoir ce que j'ai mal fait et comment y remédier. Voici le schéma:

{
    "description": "schema validating people and vehicles", 
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": [ "oneOf" ],
    "properties": { "oneOf": [
        {
            "firstName": {"type": "string"}, 
            "lastName": {"type": "string"}, 
            "sport": {"type": "string"}
        }, 
        {
            "vehicle": {"type": "string"}, 
            "price":{"type": "integer"} 
        }
     ]
   }
}

Lorsque j'essaie de le valider dans cet analyseur:

https://json-schema-validator.herokuapp.com/

J'obtiens l'erreur suivante:

   [ {
  "level" : "fatal",
  "message" : "invalid JSON Schema, cannot continue\nSyntax errors:\n[ {\n  \"level\" : \"error\",\n  \"schema\" : {\n    \"loadingURI\" : \"#\",\n    \"pointer\" : \"/properties/oneOf\"\n  },\n  \"domain\" : \"syntax\",\n  \"message\" : \"JSON value is of type array, not a JSON Schema (expected an object)\",\n  \"found\" : \"array\"\n} ]",
  "info" : "other messages follow (if any)"
}, {
  "level" : "error",
  "schema" : {
    "loadingURI" : "#",
    "pointer" : "/properties/oneOf"
  },
  "domain" : "syntax",
  "message" : "JSON value is of type array, not a JSON Schema (expected an object)",
  "found" : "array"
} ]
34
Stanimirovv

Essaye ça:

{
    "description" : "schema validating people and vehicles",
    "type" : "object",
    "oneOf" : [{
        "properties" : {
            "firstName" : {
                "type" : "string"
            },
            "lastName" : {
                "type" : "string"
            },
            "sport" : {
                "type" : "string"
            }
        },
        "required" : ["firstName"]
    }, {
        "properties" : {
            "vehicle" : {
                "type" : "string"
            },
            "price" : {
                "type" : "integer"
            }
        },
        "additionalProperties":false
    }
]
}
44
jruizaranguren

oneOf doit être utilisé dans un schéma pour fonctionner.

A l'intérieur propriétés, c'est comme une autre propriété appelée "oneOf" sans l'effet souhaité.

14
Arian Kiehr