VSCode配置JSONSchema_自定义JSON校验规则与智能提示教程

陌瑶小哥_7182

陌瑶小哥_7182

2026-05-08

786人浏览

原创

先确认语言模式是纯json而非jsonc;再检查$schema路径是否正确(url需200响应,本地路径须用file:///协议且大小写敏感),并确保json.schemas配置在工作区settings.json中且filematch匹配准确。

vscode配置jsonschema_自定义json校验规则与智能提示教程

JSON文件没提示?先确认语言模式是不是真正的JSON

VSCode里打开一个.json文件,右下角显示“JSON with Comments”或“JSONC”,那智能提示大概率不会触发——它不认$schema,也不加载你配的json.schemas。必须是纯“JSON”语言模式才行。

解决方法很简单:点击右下角语言标识 → 搜索“JSON” → 选中第一个“JSON”(不是带C的那个)。如果文件没后缀或后缀不标准(比如config),就手动切;也可以在.vscode/settings.json里加这条强制绑定:

"files.associations": {
  "config": "json"
}

常见坑:改完设置没重启编辑器标签页,旧文件仍沿用旧语言模式;或者文件已打开状态下切换语言,$schema字段不会自动生效,得保存或重新打开。

用$schema字段最直接,但路径写错就完全静默失效

在JSON文件顶部加$schema是最快启用校验的方式,但VSCode对路径协议极其敏感:

  • 远程URL(如"$schema": "https://json.schemastore.org/package.json")必须返回HTTP 200且Content-Type为application/schema+json或application/json
  • 本地文件必须用file:///协议,Windows下盘符大写、三个斜杠缺一不可:"$schema": "file:///D:/myproject/schemas/config.schema.json"
  • 相对路径(如"$schema": "./schemas/config.schema.json")不被支持,VSCode会忽略它,也不报错

验证是否生效:打开开发者工具(Ctrl+Shift+P → “Developer: Toggle Developer Tools”),切到Console标签,如果有Failed to load schema from …就是路径问题;没日志也不代表成功——再检查右下角语言模式和文件是否保存过。

json.schemas配置写在哪儿?工作区级优先于用户级

如果你不能改JSON文件本身(比如是别人维护的构建配置),就得靠VSCode设置绑定Schema。关键点在于配置位置:

Json Schema Toolkit
Json Schema Toolkit

使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。

下载
  • 用户级设置(全局):~/.vscode/settings.json,影响所有项目
  • 工作区级设置(推荐):[项目根目录]/.vscode/settings.json,只对当前项目生效,且优先级更高

配置示例(放在工作区.vscode/settings.json中):

"json.schemas": [
  {
    "fileMatch": ["package.json"],
    "url": "https://json.schemastore.org/package.json"
  },
  {
    "fileMatch": ["**/my-config.json"],
    "url": "file:///Users/me/project/schemas/my-config.schema.json"
  }
]

注意:fileMatch是glob模式,匹配的是**相对于工作区根目录的路径**。比如项目结构是/project/src/my-config.json,那"**/my-config.json"能匹配,但"src/my-config.json"就不能——除非你明确写成"src/my-config.json"。

本地Schema文件语法错一点,整个校验链就断掉

自定义Schema不是写完扔进去就行。VSCode的JSON语言服务器解析Schema时非常严格:

  • 少一个逗号、多一个Tab缩进、用了中文引号,都会导致Schema加载失败,且没有任何提示,只是补全和校验全消失
  • 含$ref引用的Schema,每个被引用的子文件也必须能被VSCode访问(同样要file:///或URL可直达)
  • 大型Schema(尤其深度嵌套oneOf或复杂pattern)会让语言服务器响应变慢,输入时卡顿、hover提示延迟几秒都算正常

建议动作:用ajv validate命令行工具或在线校验器(如jsonschemavalidator.net)先跑一遍Schema本身,确保它语法合法、结构完整。别等到VSCode里不提示了才回头查Schema——那已经是最晚的排查节点。

真正容易被忽略的,是Schema里的description和default字段。它们不参与校验,但决定了你在VSCode里悬停看到什么、补全列表里排第几。没写description,提示就是干巴巴的类型名;没设default,哪怕字段是必填的,也不会在补全里标星或置顶。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode js json

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2789

3

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2023.07.25

2168

9

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

2023.08.02

1140

5

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.09

1078

4

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

2023.09.05

1296

5

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

1998

7

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

2023.09.20

3100

8

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

2023.09.22

13655

6

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

529

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程