參考
基礎概念
在什麼是 schema?中,我們描述了schema是什麼,並希望能證明 schema 語言的必要性。在這裡,我們繼續撰寫一個簡單的 JSON Schema。
哈囉,世界!
在學習任何新語言時,通常從最簡單的事情開始會很有幫助。在 JSON Schema 中,一個空的物件是一個完全有效的 schema,它會接受任何有效的 JSON。
{}
只要是有效的 JSON,這就會接受任何內容
資料
42
資料
"我是一個字串"
資料
{ "一個": [ "任意", "巢狀" ], "資料": "結構" }
您也可以使用 true
來代替空物件,以表示與任何內容匹配的 schema,或使用 false
來表示與任何內容都不匹配的 schema。
只要是有效的 JSON,這就會接受任何內容
true
資料
42
資料
"我是一個字串"
資料
{ "一個": [ "任意", "巢狀" ], "資料": "結構" }
此 schema 的文件將始終無效
false
資料
"反抗是徒勞的... 這永遠都會失敗!!!"
type 關鍵字
當然,如果我們只是想接受任何 JSON 文件,就不會使用 JSON Schema 了。在 JSON Schema 中最常見的做法是限制為特定類型。type
關鍵字就是用於此目的。
當本書提到 JSON Schema「關鍵字」時,指的是物件中鍵/值對的「鍵」部分。編寫 JSON Schema 的大部分工作都涉及將特殊的「關鍵字」映射到物件中的值。
例如,在以下範例中,只接受字串
{ "type": "string" }
資料
"我是一個字串"
資料
42
type
關鍵字在這裡有更詳細的說明。
宣告 JSON Schema
要判斷 JSON Schema 使用哪個草案版本並不總是容易的。您可以使用 $schema
關鍵字來宣告該綱要依據哪個版本的 JSON Schema 規範編寫。請參閱$schema以取得更多資訊。通常建議包含它,但並非必要。
為了簡潔起見,本書中的大多數範例都不包含 $schema
關鍵字,但在實際應用中應始終使用它。
{ "$schema": "https://json-schema.dev.org.tw/draft/2020-12/schema" }
草案版本特定的資訊
在 Draft 4 中,
$schema
值為 https://json-schema.dev.org.tw/schema#
指的是最新版本的 JSON Schema。此用法已遭棄用,必須使用特定版本的 URI。宣告唯一識別符
最佳實務是為每個綱要包含一個 $id
屬性作為唯一識別符。目前,只需將其設定為您控制的網域上的 URL,例如
{ "$id": "http://yourdomain.com/schemas/myschema.json" }
當您開始建構複雜的綱要時,$id
的詳細資訊會變得更加明顯。
草案版本特定的資訊
在 Draft 4 中,
$id
只是 id
(沒有美元符號)。