Json Schema example for oneOf objects

匿名 (未验证) 提交于 2019-12-03 01:17:01

问题:

I am trying to figure out how oneOf works by building a schema which validates two different object types. For example a person (firstname, lastname, sport) and vehicles (type, cost).

Here are some sample objects:

{"firstName":"John", "lastName":"Doe", "sport": "football"}  {"vehicle":"car", "price":20000} 

The question is what have I done wrongly and how can I fix it. Here is the schema:

{     "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"}          }      ]    } } 

When I try to validate it in this parser:

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

I get the following error:

   [ {   "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" } ] 

回答1:

Try this:

{     "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     } ] } 


回答2:

oneOf need to be used inside a schema to work.

Inside properties, it's like another property called "oneOf" without the effect you want.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!