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

最近我在做一些前端項目,我發現有的配置文件,比如 .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.pswp.cn/news/713858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713858.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Leetcode】2369. 檢查數組是否存在有效劃分

文章目錄 題目思路代碼結果 題目 題目鏈接 給你一個下標從 0 開始的整數數組 nums ,你必須將數組劃分為一個或多個 連續 子數組。 如果獲得的這些子數組中每個都能滿足下述條件 之一 ,則可以稱其為數組的一種 有效 劃分: 子數組 恰 由 2 個…

MATLAB算法實戰應用案例精講-【圖像處理】三維重建(最終篇)

目錄 前言 相機定標和三維重建 針孔相機模型和變形 三維成像 一、機器視覺系統組成

大數據智能化-長視頻領域

隨著數字化時代的到來,長視頻領域的發展迎來了新的機遇和挑戰。在這一背景下,大數據智能化技術的應用成為長視頻行業提升用戶體驗、優化運營管理的重要手段之一。本文將從優愛騰3大長視頻背景需求出發,分析靜態資源CDN、視頻文件存儲與分發、…

網絡安全、信息安全、計算機安全,有何區別?

這三個概念都存在,一般人可能會混為一談。 究竟它們之間是什么關系?并列?交叉? 可能從廣義上來說它們都可以用來表示安全security這樣一個籠統的概念。 但如果從狹義上理解,它們應該是有區別的,區別在哪呢&…

力扣hot100題解(python版36-40題)

36、二叉樹的中序遍歷 給定一個二叉樹的根節點 root ,返回 它的 *中序 遍歷* 。 示例 1: 輸入:root [1,null,2,3] 輸出:[1,3,2]示例 2: 輸入:root [] 輸出:[]示例 3: 輸入&am…

tcping實用小工具

Tcping實用小工具命令詳解 一、tcping介紹 tcping:tcping命令基于tcp協議監控,可以從較低級別的協議獲得簡單的,可能不可靠的數據報服務。 原則上,TCP應該能夠在從容硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。 …

【機器學習基礎】層次聚類-BIRCH聚類

🚀個人主頁:為夢而生~ 關注我一起學習吧! 💡專欄:機器學習 歡迎訂閱!相對完整的機器學習基礎教學! ?特別提醒:針對機器學習,特別開始專欄:機器學習python實戰…

企業微信私有部署:實現高效溝通與信息安全

隨著移動互聯網的快速發展,企業微信作為一種高效、便捷的通訊工具,已經成為了眾多企業的首選。然而,對于一些對信息安全有特殊要求的大型企業而言,使用公有版企業微信并不能滿足其安全需求。因此,企業微信私有部署應運…

matplotlib.animation 3d姿態動畫

目錄 演示效果: 演示代碼: 保存為gif 演示效果: 演示代碼: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定義人體關鍵點…

【c++入門】純粹的五位偶數

說明 純粹偶數指的是一個數的各個位都是偶數的數,比如:24686;請編程求出10000~n中,所有的五位的純粹偶數有多少個? 輸入數據 一個整數n(n為一個5位的整數) 輸出數據 一個整數,代…

網絡防御第6次作業

防病毒網關 按照傳播方式分類 病毒 病毒是一種基于硬件和操作系統的程序,具有感染和破壞能力,這與病毒程序的結構有關。病毒攻擊的宿主程序是病毒的棲身地,它是病毒傳播的目的地,又是下一次感染的出發點。計算機病毒感染的一般過…

Java基礎 - Stream 流:Stream API的中間操作

在上一篇博客中,我介紹了構建 Stream 流的多種方式,以及 Stream 流的特點和優勢。如果你還沒有閱讀,你可以點擊這里查看。 Java基礎 - Stream 流:構建流的多種方式 在這篇博客中,我將探索 Stream API 的中間操作&…

動態規劃(算法競賽、藍橋杯)--分組背包DP

1、B站視頻鏈接&#xff1a;E16 背包DP 分組背包_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i組第j個物品的體積 s[i]:第i組物品的個數 int f[N][N]; // f[i,j]:前i組物品&#xff0c;能放…

學習JavaEE的日子 Day21 枚舉

Day21 1.枚舉的引入 需求&#xff1a;編寫季節類&#xff08;Season&#xff09;&#xff0c;該類只有四個對象&#xff08;spring&#xff0c;summer&#xff0c;autumn&#xff0c;winter&#xff09; 概念&#xff1a;枚舉&#xff08;enum&#xff09;全稱為 enumeration&…

基帶信號處理設計原理圖:2-基于6U VPX的雙TMS320C6678+Xilinx FPGA K7 XC7K420T的圖像信號處理板

基于6U VPX的雙TMS320C6678Xilinx FPGA K7 XC7K420T的圖像信號處理板 綜合圖像處理硬件平臺包括圖像信號處理板2塊&#xff0c;視頻處理板1塊&#xff0c;主控板1塊&#xff0c;電源板1塊&#xff0c;VPX背板1塊。 一、板卡概述 圖像信號處理板包括2片TI 多核DSP處理…

Linux進程管理:(二)進程調度原語

文章說明&#xff1a; Linux內核版本&#xff1a;5.0 架構&#xff1a;ARM64 參考資料及圖片來源&#xff1a;《奔跑吧Linux內核》 Linux 5.0內核源碼注釋倉庫地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 進程調度的概念比較簡單&#xff0c…

Java學習筆記NO.17

T1&#xff1a;合并兩個排序好的整數數組 import java.util.Arrays;public class MergeSortedArrays {public static int[] mergeArrays(int[] arr1, int[] arr2) {int[] result new int[arr1.length arr2.length];int i 0, j 0, k 0;while (i < arr1.length &&am…

一個簡單的iOS天氣應用程序源碼

創建一個簡單的iOS天氣應用程序涉及到多個步驟&#xff0c;包括設置項目、編寫代碼和使用外部API。由于篇幅限制&#xff0c;我將提供一個基礎的示例&#xff0c;這個例子會展示如何創建一個簡單的UI&#xff0c;獲取用戶的當前位置&#xff0c;并從OpenWeatherMap API獲取天氣…

QPS 提升 10 倍!滴滴借助 StarRocks 物化視圖實現低成本精確去重

作者&#xff1a;滴滴 OLAP 開發工程師 劉雨飛 小編導讀&#xff1a; 滴滴于 2022 年引入了 StarRocks。經過一年多的努力&#xff0c;StarRocks 逐漸替代了原有技術棧&#xff0c;成為滴滴內部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已經成功建立了超過 40 個 …

Cesium插件系列——3dtiles壓平

本系列為自己基于cesium寫的一套插件具體實現。 這里是根據Cesium提供的CustomShader來實現的。 在CustomShader的vertexShaderText里&#xff0c;需要定義vertexMain函數&#xff0c;例如下&#xff1a; struct VertexInput {Attributes attributes;FeatureIds featureIds;…