柚子快報激活碼778899分享:JSON Schema及其用法
柚子快報激活碼778899分享:JSON Schema及其用法
本篇主要介紹JSON Schema的基本語法,必要時會使用python代碼來驗證。
??JSON Schema是一種用于描述JSON數(shù)據(jù)的規(guī)范,可以用來定義JSON數(shù)據(jù)對象的結構、格式和約束條件。通過JSON Schema,可以對JSON數(shù)據(jù)進行驗證、校驗和文檔化,確保數(shù)據(jù)的正確性和完整性。
1 Json Schema基本語法
??JSON Schema能校驗JSON數(shù)據(jù),但JSON Schema本身也是一種JSON結構。JSON Schema的基本語法中主要包括以下幾個關鍵詞:
關鍵詞說明$schema聲明該模式是根據(jù)標準的特定草案編寫的,主要用于版本控制,可省略;$id定義模式的URI,可省略;title/description描述和注釋信息。不會對要校驗的JSON數(shù)據(jù)??墒÷?;type數(shù)據(jù)類型。該關鍵字會定義JSON數(shù)據(jù)的第一個約束,只有當type取值為object時,才能指定該shema校驗的為JSON數(shù)據(jù);
具體舉例如下:
from jsonschema import validate
schema={"type": "string"}
schema1={ "type":"object"}
data={ "message": "Hello"}
def json_validate(data,schema):
try:
validate(instance=data, schema=schema)
print("Valid")
except:
print("Invalid")
json_validate(data,schema)
json_validate(data,schema1)
其輸出內(nèi)容為:
Invalid Valid
2 JSON Schema類型
??雖然前文中type中的關鍵字為object時才能校驗JSON數(shù)據(jù),但是type關鍵字還可以有其他取值,并且不同數(shù)據(jù)類型有各自其他限定的關鍵詞。 type關鍵字可取值有:object、string、array、integer、number、boolean、null。boolean和null并沒有相關的限定關鍵詞,這里就不介紹了。 JSON Schema實際上是一個嵌套結構,下面的很多關鍵詞的取值也可以是一個JSON Schema格式。
2.1 object類型
object類型類似于Python中的字典(dict)類型,其限定關鍵詞主要有以下幾個:
關鍵詞說明propertiesobject類型。其中每個鍵是待校驗的JSON中屬性的名稱,值是用于驗證該屬性的模式。此關鍵字將忽略與properties關鍵字中的任何鍵名稱不匹配的任何屬性;patternPropertiesobject類型。如果待校驗的JSON中屬性的名稱與給定的正則表達式匹配,則屬性值必須符合指定的模式;additionalProperties取值為true/false。是否允許待校驗的JSON中存在未在properties屬性中或不符合patternProperties中的模式的鍵值;requiredList型。待校驗的JSON中必須存在的鍵值。也就是說patternProperties中指定的鍵值不是必須存在的;minProperties數(shù)值。待校驗的JSON中必須滿足的最小屬性個數(shù);maxProperties數(shù)值。待校驗的JSON中必須滿足的最大屬性個數(shù);propertyNames待校驗的JSON中屬性名稱必須滿足的模式;可以配合pattern關鍵詞使用;
具體舉例如下:
from jsonschema import validate
schema={
"type": "object",
"properties": {
"message": {"type": "string"}
},
"required": ["message","role"],
"additionalProperties": False,
}
data={
"role":"system",
"message":"你是誰啊"
}
def json_validate(data,schema):
try:
validate(instance=data, schema=schema)
print("Valid")
except:
print("Invalid")
json_validate(data,schema)
具體結果如下:
Invalid
2.2 string型
string類型限定的關鍵詞主要有以下:
minLength/maxLength數(shù)值型。字符串的最小長度、最大長度;pattern字符串需滿足的正則表達式;format時間和日期:“date-time”、“time”、“date"和"duration”; 郵件:“email”,“idn-email”; 域名:“hostname” “idn-hostname”; IP: “ipv4” “ipv6”; 資源標識符:“uuid” “uri” “uri-reference” “iri” “iri-reference” ; uri-template: “uri-template”; json pointer: “json-pointer” “relative-json-pointer”; 正則表達式:“regex”
舉例如下:
from jsonschema import validate
schema={
"type": "object",
"properties": {
"message": {"type": "string"},
'date': {"type": "string",
"format": "date"}
},
"required": ["message","role"],
"additionalProperties": True,
}
data={
"role":"system",
"message":"你是誰啊",
"date":"2024-03-30"
}
def json_validate(data,schema):
try:
validate(instance=data, schema=schema)
print("Valid")
except:
print("Invalid")
json_validate(data,schema)
2.3 numeric型
JSON schema中的numeric型有兩種取值:number(類似于Python中的float型和int型)和integer(僅類似于Python中int型)。所以這里重點介紹number,其限定的關鍵詞包括以下幾種:
關鍵詞描述multipleOf正整數(shù)。數(shù)值必須為給定值的倍數(shù);minimum數(shù)值必須大于等于該值;maximum數(shù)值必須小于等于該值;exclusiveMinimum數(shù)值必須大于該值;exclusiveMaximum數(shù)值必須小于該值;
舉例如下:
from jsonschema import validate
schema={
"type": "object",
"properties": {
"num":{"type":"number",
"multiplesOf":10,
"miximum":20,
"maximum":300}
}
}
data={
"num":230
}
def json_validate(data,schema):
try:
validate(instance=data, schema=schema)
print("Valid")
except:
print("Invalid")
json_validate(data,schema)
其結果如下:
Valid
2.4 array型
array型類似于類似于python中的list型和tuple型,其限定的關鍵詞主要有以下:
關鍵詞描述itemsobject型。用于驗證數(shù)組中的所有項;prefixItemsList型。按索引驗證tuple中的每一個項。此時若將items設置為false, 那么元組中將不允許有其他項;containsobject型。數(shù)組中至少要包含的項;unevaluatedItemstrue/false, 數(shù)組中是否允許任何未在items、prefixItems和contains指定的數(shù)據(jù)項存在;minItems最小的元組數(shù);maxItems最大的元組數(shù);uniqueItemstrue/false, 數(shù)據(jù)項是否要求是唯一的;
舉例如下:
from jsonschema import validate
schema={
"type": "object",
"properties": {
"num": {
"type": "array",
"prefixItrems": [
{ "type": "number"},
{"type":"string"}
],
"unevaluatedItems": True
}
}
}
data={"num":[1,'hello',5.4]}
def json_validate(data,schema):
try:
validate(instance=data, schema=schema)
print("Valid")
except:
print("Invalid")
json_validate(data,schema)
其結果如下:
Valid
3 其他
除了以上介紹的關鍵詞之外,還有一些其他的常用關鍵詞,具體如下:
enum: 枚舉類型。const:常數(shù)。contentMediaType:contentEncoding:
參考資料:
https://json-schema.org/understanding-json-schema/referencehttps://zhuanlan.zhihu.com/p/72607132
柚子快報激活碼778899分享:JSON Schema及其用法
相關閱讀
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權,聯(lián)系刪除。