JSON Schema中无法找到classification引用的技术求助
解决JSON Schema内部引用找不到的问题
你的问题出在两个核心点:
- 把可复用的
classification定义放在了顶级properties里——这里是用来描述实例数据的属性结构,不是存放可复用Schema片段的位置,IDE自然识别不到它作为引用目标。 $ref的路径写法错误,内部引用应该用JSON Pointer格式(#开头),而非你写的绝对路径格式。
修正步骤
- 将
classification移到definitions字段下(这是JSON Schema存放可复用片段的标准位置,Draft 07也支持用$defs,两者功能一致)。 - 修改
categories里的$ref为#/definitions/classification,用JSON Pointer指向definitions里的目标片段。
修正后的完整Schema代码
{ "$schema": "https://json-schema.org/draft-07/schema#", "$id": "https://digital.com/schemas/products", "description": "Schema for Product Data", "title": "Products", "type": "object", "required": ["products"], "properties": { "products": { "type": "array" }, "options": { "type": "array", "items": { "type": "object", "properties": { "productId": { "type": "string" }, "productName": { "type": "string" }, "categories": { "type": "object", "additionalProperties": false, "allOf": [ { "$ref": "#/definitions/classification" } ] }, "productType": { "type": "string", "enum": ["electronic", "digital", "internet", "video"] } }, "required": ["productId"] } } }, "definitions": { "classification": { "type":"object", "properties": { "relevance-score": { "type":"integer", "minimum": 1, "maximum": 5 }, "group":{ "enum":["adult","teen","seniors"] } } }, "mp4": { "type": "object", "properties": { "mediaType": { "type": "string", "enum": ["video"] }, "playlength": { "type": "integer" } } } }, "mp3": { "type": "object", "properties": { "mediaType": { "enum": ["audio"] } } } }
补充说明
如果一定要用$id做内部引用,需要调整classification的$id为相对路径(比如#/classification),同时把它放在顶级Schema下(不是properties里),然后$ref用#/classification。但这种写法不如用definitions直观,也不符合通用的Schema编写习惯,更推荐上面的标准方案。
内容的提问来源于stack exchange,提问作者BreenDeen
相关产品推荐
相关产品推荐

