JSON Schema编写:如何避免重复定义数组项公共必填属性
JSON Schema 公共属性复用优化方案
你可以利用 JSON Schema 约束默认逻辑与的特性,将所有数组项通用的属性定义、必填规则提取到anyOf的外层,分支内仅保留各场景特有的属性约束即可,完全无需重复定义公共字段。
另外你原写法中additionalProperties: false放在数组层级是无效配置,该属性仅对object类型生效,需要调整到数组项的object约束内。
优化后可直接使用的Schema如下:
{ "$schema": "https://json-schema.org/draft/2019-09/schema", "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "anyOf": [ {}, { "properties": { "version": { "type": "number" } } }, { "properties": { "weight": { "type": "number" } } } ], "additionalProperties": false } }
逻辑说明
- 外层的
properties与required是所有数组项都必须满足的公共约束:强制存在name字段且类型为字符串 anyOf三个分支分别对应允许的三种结构:- 空对象分支:仅保留必填的
name字段,无额外属性 - 第二个分支:允许额外携带
version数字字段 - 第三个分支:允许额外携带
weight数字字段
- 空对象分支:仅保留必填的
- 如果你后续需要新增其他公共属性,仅需要在外层
properties中添加一次即可,不需要修改anyOf内的分支逻辑。
内容的提问来源于stack exchange,提问作者mkEagles
相关产品推荐
相关产品推荐

