如何在JSON Schema中定义基元素为指定类型的任意层级嵌套数组
实现方案
你需要的能力可以通过JSON Schema的递归定义实现,核心逻辑是让数组元素的校验规则递归引用自身,适配任意嵌套深度,无需提前预知层级:
{ "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "nestedStringOrArray": { "anyOf": [ // 最底层元素必须是字符串 { "type": "string" }, // 嵌套数组的每个元素都符合当前递归规则 { "type": "array", "items": { "$ref": "#/definitions/nestedStringOrArray" } } ] } }, // 根节点直接应用递归规则 "$ref": "#/definitions/nestedStringOrArray" }
校验逻辑说明
- 合法示例:
["a", ["b", ["c"]]]会正常通过校验,所有底层元素都是字符串 - 非法示例:
["a", [1, ["c"]]]会校验失败,因为嵌套层出现了非字符串的数字类型 - python的jsonschema库完全兼容该规则,无需额外依赖配置
全局元素唯一校验
JSON Schema原生的uniqueItems仅能校验当前层级数组的元素唯一性,无法跨嵌套层级校验全局唯一,你提到的将数组扁平化后在Python侧自行校验是性价比更高的实现方式。
内容的提问来源于stack exchange,提问作者nichollsg
相关产品推荐
相关产品推荐

