如何利用JSON $ref复用Schema A定义含minProperties的Schema B?
问题
现有两个JSON Schema:A和B,二者唯一区别是Schema B多了minProperties属性。能不能通过JSON的$ref属性复用Schema A的内容,不用重复定义所有属性再添加minProperties?
示例如下:
- Schema A:
{ "id": "A", "type": "object", "additionalProperties": false, "properties": { ... 大量属性 ... } }
- Schema B:
{ "id": "B", "type": "object", "additionalProperties": false, "minProperties": 1, "properties": { ... 和Schema A完全相同的大量属性 ... } }
解决方案
当然可以,用JSON Schema的allOf关键字搭配$ref就能实现复用,不用重复写那些繁杂的属性定义。
具体实现
让Schema B通过$ref引用Schema A的全部规则,同时在allOf数组里加入包含minProperties的配置对象,这样既能复用A的所有约束,又能添加B独有的规则:
{ "id": "B", "allOf": [ { "$ref": "#A" }, // 路径根据实际情况调整:同文件用#A,跨文件则写文件路径+#A,比如"schema-a.json#A" { "minProperties": 1 } ] }
注意事项
$ref的路径必须正确:如果A和B在同一个JSON文件里,直接用#A就能引用到A的定义;如果A是单独的文件,要写全文件路径,比如"$ref": "./schema-a.json#A"。- 这种方式会同时应用Schema A的所有规则(包括
properties、additionalProperties等)和新增的minProperties约束,完全避免了重复代码。
内容的提问来源于stack exchange,提问作者Daniel Gruszczyk
相关产品推荐
相关产品推荐

