JSON 文件里的 “$schema” 是干什么用的?

news/发布时间2024/9/20 5:31:43

最近我在做一些前端项目,我发现有的配置文件,比如 .prettierrc.json 或者 tsconfig.json 里面都会看到一个 $schema 字段,有点好奇,就查了一下。

什么是 JSON Schema

JSON Schema是一种基于JSON (JavaScript Object Notation) 的格式,用于描述JSON数据的结构和验证 JSON 数据。它提供了一套定义性语言来指定 JSON 格式的规则,包括对象的属性、数据类型、数据间的关系、条件约束等,从而使得可以自动化地对 JSON 数据进行校验、注解和操作。通过使用JSON Schema,开发者可以确保他们的数据遵循特定的结构和约束,这对于数据交换和 API 的使用尤为重要。

{"productId": 1,"productName": "A green door","price": 12.50,"tags": [ "home", "green" ]
}

这是一个产品目录的 JSON,JSON 对象是人类可读的,但它不包含任何上下文或元数据。仅从对象本身无法判断键的含义或可能的输入是什么。JSON Schema是一个提供这些问题答案的标准。

为什么使用 JSON Schema

JSON Schema是一套词汇表,它使得JSON数据在大规模应用中保持一致性、有效性和互操作性。

简单来说,就是写一个描述文件,描述一个标准的 JSON 文件,应该包含哪些字段,各个层级的 key 的结构如何,分别是什么数据类型,每个键的作用等等。

可以认为是一个 JSON 文件遵循的标准,比如开头提到的, .prettierrc.json 文件,里面有一个 schema

{"$schema": "https://json.schemastore.org/prettierrc","printWidth": 100,"tabWidth": 2,"useTabs": false,"semi": false,"singleQuote": true,"trailingComma": "all","bracketSameLine": true,"arrowParens": "always","bracketSpacing": true,"endOfLine": "auto"
}

有了这个 schema 你就可以使用工具来验证,每个字段有没有拼错,有什么作用等等。

怎么验证一个 JSON 的格式?

首先,你编写一个 JSON 文件的时候,应该附上对应的 schema,比如上面的例子,就是有一个预定义的 schema,如果是你自己的项目,你需要遵循 JSON Schema 的规范,来编写对应的 Schema 文件。

如果你像我一样使用 VS Code,默认就是有 JSON Schema 校验的:
在这里插入图片描述
除了在 json 文件中,注入 schema 字段来指定,也可以通过 VS Code 的 settings.json 来配置,如上图的样子。

如果是别的 IDE,应该也有很多实现的插件和工具来进行此项校验。这样就不担心配置文件写错了。

总结

JSON Schema 是一种编码规范,帮助检查 JSON 文件的格式,有效约束 JSON 文件的标准化,各种 IDE 都有 Schema 验证的插件和工具,合理使用可以减少配置文件编写带来的错误。如果自己项目里使用的 JSON,也可以自己创建对应的 Schema 文件来提供此项功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/ZSNE/10064.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【C++初识】语句

文章目录 1.注释 变量 常量 关键字 标识符命名规则 数据类型 sizeof关键字 数据的输入 运算符2.程序流程结构2.1选择结构2.2循环结构2.21while{循环条件}{循环语句};//满足循环条件,执行循环语句2.22do{循环语句}while{循环条件};//do....whi…

备战蓝桥杯---树形DP基础2

话不多说,直接看题: 这里与前面的树形DP不同,在这里,对于一个节点,它被覆盖的情况有3种,1.被父亲节点覆盖2.自己选3.其中的一个儿子选了。 因此,我们令dp[i][0]表示一定选i,dp[i][1…

GEE入门篇|图像处理(二):在Earth Engine中进行波段计算

目录 波段计算 1.NDVI的计算 2.NDVI 归一化差值的单次运算计算 3.使用 NDWI 的归一化差值 波段计算 许多指数可以使用 Earth Engine 中的波段运算来计算。 波段运算是对图像中两个或多个波段进行加、减、乘或除的过程。 在这里,我们将首先手动执行此操作&#x…

逆序字符串

逆序字符串 题目描述:解法思路:解法代码:运行结果: 题目描述: 输入⼀个字符串,写⼀个函数将⼀个字符串的内容逆序过来。 测试1: 输⼊:abcdef 输出:fedcba 测试2&#x…

Linux信号【systemV】

目录 前言 正文: 1消息队列 1.1什么是消息队列? 1.2消息队列的数据结构 1.3消息队列的相关接口 1.3.1创建 1.3.2释放 1.3.3发送 1.3.4接收 1.4消息队列补充 2.信号量 2.1什么是信号量 2.2互斥相关概念 2.3信号量的数据结构 2.4…

PyTorch深度学习快速入门

PyTorch深度学习快速入门 1.PyTorch环境配置及安装2.python编辑器的选择、安装、配置(pycharm、JupyTer安装)3.为什么torch.cuda.is_available()返回false4.python学习中两大法宝函数(也可用在pytorch)5.pycharm和jupyter&#xf…

基于java+springboot动物检疫信息管理系统设计和实现

基于java SSM springboot动物检疫信息管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

太实用了!微信自动回复神器,助你轻松社交

在当今社交网络的时代,微信已经成为了一种重要的社交工具,为了更有效地管理微信号和提高社交效率,许多人开始使用微信管理系统,下面就一起来看看它的优势吧。 首先,使用微信管理系统可以实现多个微信号同时登陆&#…

input输入框过滤非金额内容保留一个小数点和2位小数

这篇是输入框过滤非金额内容保留一个小数点和2位小数,金额的其他格式化可以看这篇文章常用的金额数字的格式化方法 js方法直接使用 该方式可以直接使用过滤内容,也可以到onInput或onblur等地方过滤,自行使用 /*** 非金额字符格式化处理* p…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理?如果你的组织处理关键或敏感的业务数据,测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%,这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

性能测试-反编译jar

方法一,使用jd-gui 1、官网下载:Java Decompiler 2、下载mac版本后,解压,如下所示: 双击 JD_GUI,提示错误,如下所示: 已经安装了java 17,是java 1.8以上版本&#xff0…

kali linux通过aircrack-ng命令破解wifi密码

相关阅读:如何破解攻击WiFi 百度安全验证https://baijiahao.baidu.com/s?id1764248756021219497&wfrspider&forpc上面2篇文章写得都很不错 一、前期准备工作 1、将无线网卡挂载到Kali上 ​ 将无线网卡插到电脑上,如果弹出检测到新的USB设备&…

springboot223基于springboot的信息技术知识竞赛系统的设计与实现

信息技术知识赛系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装信息技术知识赛系统软件来发…

【生成式AI】ChatGPT 原理解析(2/3)- 预训练 Pre-train

Hung-yi Lee 课件整理 预训练得到的模型我们叫自监督学习模型(Self-supervised Learning),也叫基石模型(foundation modle)。 文章目录 机器是怎么学习的ChatGPT里面的监督学习GPT-2GPT-3和GPT-3.5GPTChatGPT支持多语言…

12.整数转罗马数字

题目:罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X II 。 27 写做 XXVII, 即为 XX…

「算法」常见位运算总结

位运算符 异或 按位异或可以实现无进位相加,所谓无进位相加,就是在不考虑进位的情况下将两个数相加(后面有道题需要用到这种操作) 异或的运算律 ①a ^ 0 a ②a ^ a 0 ③a ^ b ^ c a ^ ( b ^ c ) 有符号右移>> 将一个…

Linux上搭建并使用ffmpeg(Java)

关于MacOs和Windows系统上使用ffmpeg就不多说了,有很多相关文章,今天给大家分享一个在Linux环境下使用Java语言来使用ffmpeg 一、首先去官网下载一个Linux对应的ffmpeg包 1、进入ffmpeg官网:官网 2、点击左侧导航栏Download 3、选择Linux对…

react-JSX基本使用

1.目标 能够知道什么是JSX 能够使用JSX创建React元素 能够在JSX中使用JS表达式 能够使用JSX的条件渲染和列表渲染 能够给JSX添加样式 2.目录 JSX的基本使用 JSX中使用JS表达式 JSX的条件渲染 JSX的列表渲染 JSX的样式处理 3.JSX的基本使用 3.1 createElement()的问题 A. …

金融短信群发平台具有那些特点

金融短信群发平台的特点主要包括以下几个方面: 1.高效性:金融短信群发平台能够快速地发送大量的短信,使得金融信息能够迅速传达给目标客户,保证了信息的及时性和有效性。 2.安全性:金融短信群发平台对于信息的安全性非…

蓝桥杯 信号覆盖

遍历每一个坐标轴上的点&#xff0c;带入圆的方程&#xff0c;看是否在圆内或圆上 #include<bits/stdc.h> using namespace std; int main() {int w,h,n,r,i,j,k,s,ans0;cin>>w>>h>>n>>r;int x[n1],y[n1];for(i0;i<n;i){cin>>x[i]>&…
推荐文章