最近我在做一些前端項目,我發現有的配置文件,比如 .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 文件來提供此項功能。