如何基于外部非Schema数据或文件夹名实现JSON Schema自动补全提示
核心结论
原生JSON Schema标准本身不支持直接读取外部非Schema普通数据文件、扫描文件夹文件名的能力,但可以通过预生成动态JSON Schema的方案,完全实现你需要的编写时语法提示、自动补全需求,具体实现方案如下:
场景1:基于其他数据文件限定属性名/取值
- 编写轻量的自动化脚本(可选择Python、Node.js等任意熟悉的语言),监听文件1的更新,一旦文件内容变动,自动读取其
Attributes下的属性列表,生成适配文件2的JSON Schema,示例生成的Schema内容如下:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "Influence": { "type": "object", "propertyNames": { "enum": ["Attribute1", "Attribute2"] }, "additionalProperties": { "type": "number", "description": "属性对应的影响力数值" } } } }
- 在编辑器(比如VS Code)的YAML插件中配置Schema关联,将生成的Schema与文件2的路径绑定,编写文件2时编辑器会自动基于Schema给出属性名补全、输入错误提示。
场景2:基于文件夹文件名限定取值
- 同样使用自动化脚本实现:脚本扫描指定
Events文件夹下所有YAML/JSON文件,提取不带后缀的文件名生成枚举列表,写入对应JSON Schema的DefaultEvents字段约束中,示例生成的Schema内容如下:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "DefaultEvents": { "type": "array", "items": { "enum": ["event1", "event2"], "description": "仅可填写Events文件夹下存在的事件文件名(不含后缀)" } } } }
- 可配合文件监听工具、Git钩子实现自动更新:只要
Events文件夹下的文件有增删改,就自动触发脚本重新生成Schema,无需人工操作,编写时的补全提示会实时同步最新的文件名列表。
补充说明
主流编辑器的YAML/JSON插件(比如VS Code的Red Hat YAML插件)都原生支持基于JSON Schema的实时补全能力,只要预生成的Schema是最新的,编写过程中就会自动弹出候选值、语法校验提示,完全满足你的核心需求。
内容的提问来源于stack exchange,提问作者Viacheslav Rud'
相关产品推荐
相关产品推荐

