Future proof JSON schema -
is possible force known objects ("enemy" , "friend") defined while other objects allowed?
i've added last object {"type": "object"} display intended behaviour - in reality last object overrule 2 defined objects ("enemy" , "friend") causing kind of object valid schema. if remove last object, allow 2 objects nothing else.
json schema (using array faster testing):
{ "type": "array", "items": { "anyof": [ {"$ref": "#/definitions/friend"}, {"$ref": "#/definitions/enemy"}, {"$ref": "#/definitions/future"} ] }, "definitions": { "friend": { "type": "object", "properties": { "time": {"type": "string"}, "value": {"type": "number", "minimum": 100} }, "required": ["time", "value"], "additionalproperties": false }, "enemy": { "type": "object", "properties": { "enemy": {"type": "string"}, "color": {"type": "number"} }, "required": ["enemy", "color"], "additionalproperties": false }, "future": { "type": "object", "properties": { "time": {"type": "string"} }, "required": ["time"], "additionalproperties": true } } }
example json (top 3 should ok, last 3 should not ok):
[ {"time": "123", "value": 100}, <- should valid {"time": "1212", "value": 150}, <- should valid {"enemy": "bla", "color": 123}, <- should valid {"time": "1212", "value": 50}, <- should invalid bcoz of "future" {"enemy": "bla", "color": "123"}, <- shouldn't valid bcoz of "enemy" schema {"somethinginfuture": 123, "somefutprop": "ok"} <- should valid ]
it's not clear want want use combination of dependencies
, minproperties
here. 2 forms of keyword used here: property dependency , schema dependency. want @ least 1 property defined, hence minproperties
. can (note factorized common schema color
; may, or may not, want):
{ "type": "object", "minproperties": 1, "additionalproperties": { "type": "string" // properties not explicitly defined strings }, "properties": { "color": { "type": "number" } }, "dependencies": { "enemy": "color", // property dependency "friend": { // schema dependency "properties": { "color": { "minimum": 50 } }, "required": [ "color" ] } } }
note schema still allows "enemy" , "friend" @ same time (so original schema). better, sample jsons want deem valid , invalid should provided.
Comments
Post a Comment