如何为JSON Schema外部地址设置别名以避免指针重复?
在JSON Schema中为外部Schema地址设置别名的可行方法
当然可以实现,核心思路是将外部Schema的完整地址集中定义在一处,后续引用时复用这个本地别名,以下是两种常用方案:
方案一:通过本地定义复用外部Schema地址
在当前Schema的$defs(JSON Schema 2019-09及以后版本推荐)或definitions(旧版本兼容字段)中,先定义一个指向外部Schema根的引用,后续需要引用其内部定义时,只需基于这个本地别名拼接内部路径即可。
修改后的derived-schema.json示例:
{ "$defs": { // 集中定义外部Schema的完整地址,作为别名 "common-v12": { "$ref": "blah://some.url/my-common-schema-version-12.json" } }, "definitions": { "thing1": { // 复用别名,指向外部Schema的内部定义 "$ref": "#/$defs/common-v12#/definitions/schema1" }, "thing2": { "$ref": "#/$defs/common-v12#/definitions/schema2" } } }
后续如果需要更新外部Schema的版本号或地址,只需修改common-v12中的$ref值即可,无需逐个修改所有引用。
方案二:利用$id设置基准URI(适用于特定场景)
如果你的JSON Schema处理器支持$id作为基准URI,可以在当前Schema根节点设置$id,然后用相对路径引用外部Schema,但这种方式更适合外部Schema与当前Schema存在路径关联的场景。对于完全独立的外部绝对地址,方案一的灵活性更高。
注意事项
你提供的示例中存在语法错误:definitions在JSON Schema中是对象类型,而非数组,所以外部Schema的正确写法应为:
{ "definitions": { "schema1": {}, "schema2": {} } }
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

