Exemple de schéma Json pour un des objets

j'essaie de comprendre comment l'un d'eux fonctionne en construisant 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 fait de mal et comment je peux 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"} 
        }
     ]
   }
}

Quand j'essaie de le valider dans cette analyse:

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

j'obtiens l'erreur suivante:

   [ {
  "level" : "fatal",
  "message" : "invalid JSON Schema, cannot continuenSyntax 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"
} ]
24
demandé sur Jonathan Hartley 2014-07-29 15:52:34

2 réponses

essaye ceci:

{
    "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
    }
]
}
38
répondu jruizaranguren 2014-07-30 09:32:03

un des besoin d'être utilisé à l'intérieur d'un schéma au travail.

à l'Intérieur propriétés, c'est comme une autre propriété appelée "oneOf" sans l'effet que vous voulez.

9
répondu Arian Kiehr 2014-07-29 17:27:45