You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更简便地将文件名作为JSON值并实现IntelliSense支持?

问题:基于本地标签文件实现JSON属性的智能提示优化

我想让JSON文件中tags属性的允许值是tags文件夹里的文件名(不含后缀),同时让IntelliSense能显示对应标签文件里的描述信息。举个例子:

博客文章JSON示例:

{ 
    "title": "New Blog Post", 
    "content": "This is the content of the blog post...", 
    "publishedDate": "2023-08-25T15:00:00Z", 
    "author": {
        "username": "authoruser",
        "email": "author@example.com"
    },
    "tags": ["Technology", "Programming"]
}

tags/Technology.json的内容:

{
    "name": "Technology (Modern)",
    "description": "Posts about technology created after the year 2000"
}

当前我用的方法是从标签文件生成包含anyOf的Schema,再通过$ref引用:

{
    "type": "array",
    "items": {
        "anyOf": [
            {
                "const": "Technology",
                "description": "Posts about technology created after the year 2000"
            },
            {
                "const": "Programming",
                "description": "Posts about any kind of programming"
            }
        ]
    },
    "uniqueItems": true
}

文件结构如下:

posts/
  blog-post-1.json
  blog-post-2.json
  ...
tags/
  Technology.json
  Programming.json
  Retro-Technology.json
  ...

最终要实现的是解析博客JSON时,能通过/tags/{tag_value}.json获取对应数据。想问除了生成anyOf数组的Schema外,有没有更简便的实现方式?


解决方案

有两种更简便的方式可以实现需求:

1. 使用JSON Schema的enum结合动态生成工具(推荐)

你可以用脚本动态生成包含enum和描述信息的Schema片段,比anyOf结构更紧凑:

{
    "type": "array",
    "items": {
        "type": "string",
        "enum": ["Technology", "Programming", "Retro-Technology"],
        "markdownDescription": "选择一个标签:\n- Technology: Posts about technology created after the year 2000\n- Programming: Posts about any kind of programming\n- Retro-Technology: [对应标签文件中的描述]"
    },
    "uniqueItems": true
}

脚本逻辑很简单:遍历tags文件夹下的所有JSON文件,提取文件名(去掉后缀)作为enum值,再读取每个文件里的description字段拼接成提示文本。这种方式Schema更简洁,IntelliSense同样能识别并展示提示信息。

2. 利用VS Code的自定义配置+插件(仅VS Code环境)

如果是在VS Code中开发,可以通过配置json.schemas结合插件实现快速补全:
在.vscode/settings.json中添加:

{
    "json.schemas": [
        {
            "fileMatch": ["posts/*.json"],
            "schema": {
                "type": "object",
                "properties": {
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "description": "对应tags文件夹下的文件名(无后缀)"
                        },
                        "uniqueItems": true
                    }
                }
            }
        }
    ]
}

再配合VS Code的Path Intellisense插件,配置插件识别无后缀的文件名补全,就能实现标签名的快速自动补全。不过这种方式无法直接展示标签的描述信息,适合只需要快速补全的场景。

总结

如果需要完整的描述提示,动态生成Schema仍是最优解——相比anyOf,enum结构的Schema更简洁易维护,用简单脚本就能自动生成,比手动维护高效得多。


内容的提问来源于stack exchange,提问作者SomeRandomUserIGuess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:36:15