我试图通过构建验证两种不同对象类型的架构来弄清oneOf的工作原理。例如,一个人(名字,姓氏,运动)和车辆(类型,费用)。
以下是一些示例对象:
{"firstName":"John", "lastName":"Doe", "sport": "football"} {"vehicle":"car", "price":20000}
问题是我做错了什么以及如何解决。这是模式:
{ "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"} } ] } }
当我尝试在此解析器中验证它时:
https://json-schema-validator.herokuapp.com/
我收到以下错误:
[ { "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" } ]
试试这个:
{ "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 } ] }