Draft-04 JSON Schema数组校验问题:允许$ref与null值
JSON Schema Draft-04 数组元素兼容$ref类型与null的修复方案
问题背景
基于JSON Schema Draft-04编写的Schema中,要求EmploymentHistories数组的元素既可以是$ref引用的TextType类型,也可以是null,但当前Schema无法通过包含引用对象与null的实例校验,报错提示null值不被允许。
当前Schema
{ "$schema": "http://json-schema.org/draft-04/schema#", "version": "4.4.0", "title": "myCollection", "description": "Resume/CV", "type": "object", "properties": { "EmploymentHistories": { "type": "array", "items": { "oneOf": [ { "$ref": "../../../Common/json/base/TextType.json#" }, { "enum": [ null ] } ] }, "additionalProperties": false } } }
期望校验实例
{ "EmploymentHistories": [ { "value": "String", "languageCode": "aa" }, { "value": "String", "languageCode": "aa" }, null, null ] }
错误信息
文件D:\Dev\Proj\Recruiting\json\resumecv\samples\Untitled5.json无效。此处不允许null类型的值,原因是必须为以下类型之一:'string'、'object'。错误位置:EmploymentHistories / 3、EmploymentHistories / 4,对应数组项2、3无效。
修复方案
在Draft-04中,null是原生数据类型,将items.oneOf中定义null的分支从enum: [null]替换为type: "null",即可让校验器正确识别允许null值的规则。
修改后的完整Schema
{ "$schema": "http://json-schema.org/draft-04/schema#", "version": "4.4.0", "title": "myCollection", "description": "Resume/CV", "type": "object", "properties": { "EmploymentHistories": { "type": "array", "items": { "oneOf": [ { "$ref": "../../../Common/json/base/TextType.json#" }, { "type": "null" } ] }, "additionalProperties": false } } }
验证说明
修改后的Schema可正确校验目标实例,数组中的TextType对象与null值均会被判定为合法。
内容的提问来源于stack exchange,提问作者Scott H
相关产品推荐
相关产品推荐

