柚子快報(bào)激活碼778899分享:JSON Schema及其用法
柚子快報(bào)激活碼778899分享:JSON Schema及其用法
本篇主要介紹JSON Schema的基本語法,必要時(shí)會(huì)使用python代碼來驗(yàn)證。
??JSON Schema是一種用于描述JSON數(shù)據(jù)的規(guī)范,可以用來定義JSON數(shù)據(jù)對(duì)象的結(jié)構(gòu)、格式和約束條件。通過JSON Schema,可以對(duì)JSON數(shù)據(jù)進(jìn)行驗(yàn)證、校驗(yàn)和文檔化,確保數(shù)據(jù)的正確性和完整性。
1 Json Schema基本語法
??JSON Schema能校驗(yàn)JSON數(shù)據(jù),但JSON Schema本身也是一種JSON結(jié)構(gòu)。JSON Schema的基本語法中主要包括以下幾個(gè)關(guān)鍵詞:
關(guān)鍵詞說明$schema聲明該模式是根據(jù)標(biāo)準(zhǔn)的特定草案編寫的,主要用于版本控制,可省略;$id定義模式的URI,可省略;title/description描述和注釋信息。不會(huì)對(duì)要校驗(yàn)的JSON數(shù)據(jù)。可省略;type數(shù)據(jù)類型。該關(guān)鍵字會(huì)定義JSON數(shù)據(jù)的第一個(gè)約束,只有當(dāng)type取值為object時(shí),才能指定該shema校驗(yàn)的為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中的關(guān)鍵字為object時(shí)才能校驗(yàn)JSON數(shù)據(jù),但是type關(guān)鍵字還可以有其他取值,并且不同數(shù)據(jù)類型有各自其他限定的關(guān)鍵詞。 type關(guān)鍵字可取值有:object、string、array、integer、number、boolean、null。boolean和null并沒有相關(guān)的限定關(guān)鍵詞,這里就不介紹了。 JSON Schema實(shí)際上是一個(gè)嵌套結(jié)構(gòu),下面的很多關(guān)鍵詞的取值也可以是一個(gè)JSON Schema格式。
2.1 object類型
object類型類似于Python中的字典(dict)類型,其限定關(guān)鍵詞主要有以下幾個(gè):
關(guān)鍵詞說明propertiesobject類型。其中每個(gè)鍵是待校驗(yàn)的JSON中屬性的名稱,值是用于驗(yàn)證該屬性的模式。此關(guān)鍵字將忽略與properties關(guān)鍵字中的任何鍵名稱不匹配的任何屬性;patternPropertiesobject類型。如果待校驗(yàn)的JSON中屬性的名稱與給定的正則表達(dá)式匹配,則屬性值必須符合指定的模式;additionalProperties取值為true/false。是否允許待校驗(yàn)的JSON中存在未在properties屬性中或不符合patternProperties中的模式的鍵值;requiredList型。待校驗(yàn)的JSON中必須存在的鍵值。也就是說patternProperties中指定的鍵值不是必須存在的;minProperties數(shù)值。待校驗(yàn)的JSON中必須滿足的最小屬性個(gè)數(shù);maxProperties數(shù)值。待校驗(yàn)的JSON中必須滿足的最大屬性個(gè)數(shù);propertyNames待校驗(yàn)的JSON中屬性名稱必須滿足的模式;可以配合pattern關(guān)鍵詞使用;
具體舉例如下:
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)
具體結(jié)果如下:
Invalid
2.2 string型
string類型限定的關(guān)鍵詞主要有以下:
minLength/maxLength數(shù)值型。字符串的最小長(zhǎng)度、最大長(zhǎng)度;pattern字符串需滿足的正則表達(dá)式;format時(shí)間和日期:“date-time”、“time”、“date"和"duration”; 郵件:“email”,“idn-email”; 域名:“hostname” “idn-hostname”; IP: “ipv4” “ipv6”; 資源標(biāo)識(shí)符:“uuid” “uri” “uri-reference” “iri” “iri-reference” ; uri-template: “uri-template”; json pointer: “json-pointer” “relative-json-pointer”; 正則表達(dá)式:“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型)。所以這里重點(diǎn)介紹number,其限定的關(guān)鍵詞包括以下幾種:
關(guān)鍵詞描述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)
其結(jié)果如下:
Valid
2.4 array型
array型類似于類似于python中的list型和tuple型,其限定的關(guān)鍵詞主要有以下:
關(guān)鍵詞描述itemsobject型。用于驗(yàn)證數(shù)組中的所有項(xiàng);prefixItemsList型。按索引驗(yàn)證tuple中的每一個(gè)項(xiàng)。此時(shí)若將items設(shè)置為false, 那么元組中將不允許有其他項(xiàng);containsobject型。數(shù)組中至少要包含的項(xiàng);unevaluatedItemstrue/false, 數(shù)組中是否允許任何未在items、prefixItems和contains指定的數(shù)據(jù)項(xiàng)存在;minItems最小的元組數(shù);maxItems最大的元組數(shù);uniqueItemstrue/false, 數(shù)據(jù)項(xiàng)是否要求是唯一的;
舉例如下:
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)
其結(jié)果如下:
Valid
3 其他
除了以上介紹的關(guān)鍵詞之外,還有一些其他的常用關(guān)鍵詞,具體如下:
enum: 枚舉類型。const:常數(shù)。contentMediaType:contentEncoding:
參考資料:
https://json-schema.org/understanding-json-schema/referencehttps://zhuanlan.zhihu.com/p/72607132
柚子快報(bào)激活碼778899分享:JSON Schema及其用法
相關(guān)閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。