javascript
3 分钟了解 JSON Schema
大家好,我不是魚皮。
幸運又不幸,我是一名程序員,他也是一名程序員。
周末,我在開發網站,他在開發游戲,兩個人一起寫代碼,一起寫 Bug 頭禿,竟也有了一絲別樣的浪漫,好不自在!
今天,他遇到了一個后臺的 Bug,游戲死活啟動不了,我來幫忙排查一下,順便給大家分享點編程小知識~
Bug 起因
在開始游戲時,首先要加載一些配置,比如玩家的用戶名、關卡的難度、玩家的初始道具等。
由于游戲是使用 Java 語言開發的,他把這些配置封裝成了一個對象,代碼如下:
// 游戲配置 class GameConfig {// 玩家名String name;// 游戲難度int difficulty;// 玩家物品String[] items; }為了開發調試方便,他寫了一個默認的配置;并且為了方便管理默認配置,把它單獨存放到了一個 JSON 格式的文件中,而不是寫死在代碼里。
默認 JSON 配置文件如下:
{"name": "yupi","difficulty": 5,"items": ["一級頭", "二級甲"] }然后在程序中,讀取該配置文件中的 JSON 字符串,再通過 Gson 解析庫將 JSON 字符串轉換為 Java 對象,就能獲取到游戲配置信息,從而進行下一步處理了。
邏輯代碼如下:
// 加載游戲配置 void loadConfig() {String jsonStr = loadFile('config.json');GameConfig config = new Gson().fromJson(jsonStr, GameConfig.class);// 獲取玩家名稱String name = config.getName();// 更多處理... }整個流程看起來非常簡單,為啥會報錯呢?
打印出異常信息,很明顯,是 JSON 解析錯誤了:
仔細一看,哎,這小糊涂,配置文件竟然輸錯了,行尾少了個必要的引號,當然會解析失敗了!
{// 行尾都少了個引號"items": ["一級頭", "二級甲] }他表示很無奈,沒辦法,開發的時候配置越堆越多、改來改去,一不注意就少打個字符了。
我笑到:JSON 格式確實是很靈活強大的,我們在工作中,也經常會編寫一些復雜的嵌套 JSON。我倒是知道一個辦法,可以幫助減少 JSON 文件寫錯的概率。
他不以為然:哦,什么辦法?用編輯器或者校驗網站檢查一下?
我:那也只能檢查基本的語法吧,來來來,給你個更好康的神器 —— JSON Schema!
JSON Schema
JSON 格式的優點之一就是輕量,其本身并不支持寫注釋,所以沒辦法直接在文件本身中對字段進行描述。
因此,假如我們用 JSON 來做配置文件,大多數情況下都要對著文檔來查看每個字段的類型、限制范圍,才能編寫出正確的配置。這樣做不僅效率低,而且必須要自己來校驗編寫出的配置是否正確,一不小心就寫錯了。
而 JSON Schema 就是為解決此問題而生的,他本身就是 JSON 文件,用來注解和校驗 JSON 文件。
舉個例子,上面的游戲配置中,因為不小心輸錯了字符串數組導致程序出了 Bug。那可以編寫一個 JSON Schema 來校驗 items 字段是否為合法數組,代碼如下:
{"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://www.code-nav.cn/latest.json","title": "GameConfig","description": "游戲配置","type": "object","properties": {"items": {"type": "array"}} }在這個文件中,指定了 GameConfig 的類型必須為 object(對象),且 items 屬性類型必須為 array(數組)。
接下來在要校驗的數據中指定 “$schema” 字段為該校驗文件地址,比如下列 JSON 配置,故意把 items 字段的值設置為 string(字符串)而非數組:
{"$schema": "https://www.code-nav.cn/latest.json",{"name": "yupi","difficulty": 5,"items": "haha"} }這樣就能檢查數據是否合法啦!很多主流的編輯器(比如 JetBrains 全家桶)可以自動識別校驗文件,并且檢查你的 JSON 輸入是否合法。也可以使用 JSON Schema validation online 等在線校驗 JSON Schema 的網頁來查看效果:
JSON Schema 功能非常強大,除了對字段類型的校驗外,還支持判斷字段是否必填、是否為某個值(支持正則表達式)、最大值最小值、字段個數、枚舉等,甚至支持組合多個判斷條件!
比如還可以給我們的游戲配置的難度字段添加校驗,必須是 1 到 5 之間的數字,語法如下:
"difficulty": {"type": "number","minimum": 1,"maximum": 5 }優點
了解什么是 JSON Schema 后,總結下它的優點:
總之,利用好 JSON Schema,能大大減少開發者們溝通的成本、保證代碼的質量就對了。畢竟 JSON 可是當今前后端開發中最流行的數據交換格式啊!
看著他一臉懵逼的樣子,我不禁笑到:這個魚皮就是遜啦!
求求給這么遜的魚皮 點贊 支持一下吧 ??
最后再送大家一些 編程學習資料:
指路:https://t.1yb.co/qOJG
歡迎閱讀 我的編程學習和大廠求職經歷,不再迷茫!
指路:https://t.1yb.co/w66s
總結
以上是生活随笔為你收集整理的3 分钟了解 JSON Schema的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顺着 IT 的潮流,C语言再次迎来了春天
- 下一篇: asp.net电子商务开发实战 视频 第