接口自動化-JSON Schema

目錄

1.介紹

2.安裝

3.使用

3.1type關鍵字

3.2最大值最小值

3.2.1minimum 、?maximum

3.2.2 exclusiveMinimum?、exclusiveMaximum

3.3字符串特殊校驗

3.4數據約束

3.5對象約束

3.6必須屬性

3.7依賴關系

4.總結


?

1.介紹

JSON Schema 是一個用來定義和校驗 JSONweb 規范,簡而言之,JSON Schema 是用來校驗 json 是否符合預期。

根據 json 創建 JSON Schema 后,你可以使用你選擇的語言中的驗證器將示例數據與你的模式進行驗證。

在線JSON轉Schema工具 - ToolTT在線工具箱

2.安裝

pip install jsonschema==4.23.0

3.使用

3.1type關鍵字

type 關鍵字指定了數據類型,可用于驗證 JSON 數據中每個屬性的數據類型是否符合預期。常用的數據類型如下:

type解釋
string字符串類型,用于文本數據。
number數字類型,用于表示浮點數。
integer整數類型,用于表示整數。
boolean布爾類型,值為 true 或 false。
object對象類型,用于嵌套的 JSON 對象。
array數組類型,用于列表或集合。
null空值類型。

properties 是一個驗證關鍵字。當你定義 properties 時,你創建了一個對象,其中每個屬性代表正在驗證的 JSON 數據中的一個鍵。

from jsonschema import validatedef test2():(字典結構,鍵值對形式)json={"name": "zhangsan","height": 175.55}(用于校驗json_data的結構)jsonschema = {"type": "object","properties": {"name": {"type": "string"},"height": {"type": "integer"}}}validate(json,jsonschema)

?

3.2最大值最小值

minimum maximum:指定數值的最小值和最大值。

min <= x?<= max

exclusiveMinimumexclusiveMaximum:指定數值必須嚴格大于或小于某個值(不包含等于)。

min < x < max

3.2.1minimum 、?maximum

from jsonschema import validatedef test2():json={"name": "zhangsan","age": 20}jsonschema = {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "integer","minimum": 18,"maximum": 120}}}validate(instance=json,schema=jsonschema)

未成年報錯:

3.2.2 exclusiveMinimum?exclusiveMaximum

from jsonschema import validatedef test2():json={"name": "zhangsan","age": 18}jsonschema = {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "integer","exclusiveMinimum": 18,"exclusiveMaximum": 20}}}validate(instance=json,schema=jsonschema)

?

3.3字符串特殊校驗

pattern :使用正則表達式來驗證字符串是否符合特定的模式。

正則表達式 – 語法 | 菜鳥教程

?

from jsonschema import validatedef test2():json={"name": "zhangsan","age": 19}jsonschema = {"type": "object","properties": {"name": {"type": "string","pattern": r"\S{4,20}"},"age": {"type": "integer","exclusiveMinimum": 18,"exclusiveMaximum": 20}}}validate(instance=json,schema=jsonschema)

?

3.4數據約束

關鍵字作用描述
minItems指定數組最小長度
maxItems指定數組最大長度
uniqueItems確保數組元素唯一
items定義數組元素的類型與約束

?

from jsonschema import validatedef test3():json= {"data": [1,2,3,4,5,5],"string": "pytest"}jsonschema= {"type": "object","required": [],"properties": {"data": {"type": "array",#對數組添加最小長度和最大長度"minItems": 1,"maxItems": 6,"uniqueItems": True,"items": {"type": "number"}},"string": {"type": "string"}}}validate(instance=json, schema=jsonschema)

?

3.5對象約束

關鍵字作用說明
minProperties指定對象的最小屬性數量,即對象至少要有多少個屬性
maxProperties指定對象的最大屬性數量,即對象最多能有多少個屬性
additionalProperties控制對象是否允許存在未在 properties 中定義的額外屬性,默認值為 True

JSON Schema 默認不會對對象其他屬性進行校驗

from jsonschema import validatedef test_01():# JSON數據(字典結構,鍵值對形式)json_data = {"code": "SUCCESS","errMsg": "","data": False,#其他鍵"title": "測試"}# JSON Schema(用于校驗json_data的結構)json_schema = {"type": "object","required": [],  # 可指定必須包含的字段,如 ["code", "errMsg"]"properties": {"code": {"type": "string"},"errMsg": {"type": "string"},"data": {"type": "boolean"}}}validate(json_data, json_schema)

additionalProperties??

控制對象是否允許存在未在 properties 中定義的額外屬性,默認值為 True

from jsonschema import validatedef test_01():# JSON數據(字典結構,鍵值對形式)json_data = {"code": "SUCCESS","errMsg": "","data": False,#其他鍵"title": "測試"}# JSON Schema(用于校驗json_data的結構)json_schema = {"type": "object",#不允許有額外的字段"additionalProperties": False,"required": [],  # 可指定必須包含的字段,如 ["code", "errMsg"]"properties": {"code": {"type": "string"},"errMsg": {"type": "string"},"data": {"type": "boolean"}}}validate(json_data, json_schema)

參數太多時,我們可以使用對應的網站:

在線JSON轉Schema工具 - ToolTT在線工具箱

但是要注意二次檢查,可能會出現錯誤。

嵌套的json對象:

?

def testblog_list():url="http://8.137.19.140:9090/blog/getList"hread = {"user_token_header":"eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOiJ6aGFuZ3NhbiIsImV4cCI6MTc1NDczNTA5M30.cva2orifFbPsqSUlY9HJedF2hvIaRbXkMKqMOJTMx7o"}response = requests.get(url=url, headers=hread)print(response.json())json_schema={"type": "object","required": [],#additionalProperties 在哪里就限制哪一層級"additionalProperties": False,"properties": {"code": {"type": "string"},"errMsg": {"type": "string"},"data": {"type": "array","items": {"type": "object","required": [],#additionalProperties 在哪里就限制哪一層級"additionalProperties": False,"properties": {"id": {"type": "number"},"title": {"type": "string"},"content": {"type": "string"},"userId": {"type": "number"},"deleteFlag": {"type": "string"},"createTime": {"type": "string"},"updateTime": {"type": "string"},"loginUser": {"type": "boolean"}}}}}}validate(json_schema, response.json())

minProperties、maxProperties


from jsonschema import validatedef test_01():# JSON數據(字典結構,鍵值對形式)json_data = {"code": "SUCCESS","errMsg": "","data": False,}# JSON Schema(用于校驗json_data的結構)json_schema = {"type": "object",#最少一個屬性,最多兩個屬性"minProperties": 1,"maxProperties": 2,#不允許有額外的字段"additionalProperties": False,"required": [],  # 可指定必須包含的字段,如 ["code", "errMsg"]"properties": {"code": {"type": "string"},"errMsg": {"type": "string"},"data": {"type": "boolean"}}}validate(json_data, json_schema)

將屬性個數設置為3

3.6必須屬性

通過 required 關鍵字,JSON Schema 可以指定哪些屬性是必需的。如果 JSON 實例中缺少這些必需屬性,驗證將失敗(防止某些屬性沒有數據導致失敗)。

例:

from jsonschema import validatedef test_01():# JSON數據(字典結構,鍵值對形式)json_data = {}# JSON Schema(用于校驗json_data的結構)json_schema = {"type": "object","required": [],  # 可指定必須包含的字段,如 ["code", "errMsg"]"properties": {"code": {"type": "string"},"errMsg": {"type": "string"},"data": {"type": "boolean"}}}validate(json_data, json_schema)

?

required ?缺少 data 屬性校驗

from jsonschema import validatedef test_01():# JSON數據(字典結構,鍵值對形式)json_data = {"code": "SUCCESS","errMsg": "",}# JSON Schema(用于校驗json_data的結構)json_schema = {"type": "object","required": ["code","errMsg","data"],  # 可指定必須包含的字段,如 ["code", "errMsg"]"properties": {"code": {"type": "string"},"errMsg": {"type": "string"},"data": {"type": "boolean"}}}validate(json_data, json_schema)

3.7依賴關系

dependentRequired 可以定義屬性之間的依賴關系。

  • 當 JSON 實例里有 creditCard 屬性時,必須同時包含 billingAddress 屬性,不然驗證不通過;
  • 要是沒有 creditCard 屬性,billingAddress 存在或不存在都可以

代碼格式:

{"type": "object","properties": {"creditCard": {"type": "string"},"billingAddress": {"type": "string"}},"dependentRequired": {"creditCard": ["billingAddress"]}
}

示例:

缺少密碼

def test04():json = {"username": "zhangsan",# "password": "123456","age": 18,"height": 175.8}jsonschema = {"type": "object","required": [],"properties": {"username": {"type": "string"},"password": {"type": "string"},"age": {"type": "number"},"height": {"type": "number"}},"dependentRequired": {"username": ["password"]}}validate(instance=json, schema=jsonschema)

缺少賬號:

兩者都沒有:

4.總結

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918265.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端技術架構設計文檔(Vue2+Antd+Sass)

前端技術架構設計文檔&#xff08;Vue2AntdSass&#xff09; 文檔信息項目名稱前端系統&#xff08;基于 Vue2 技術棧&#xff09;技術棧核心Vue2 Ant Design Vue Sass版本號V1.0.0技術棧核心Vue2 Ant Design Vue Sass編制日期2025-08-071. 技術棧選型 1.1 核心技術框架類別…

【設計模式】抽象工廠模式 (工具(Kit)模式)

抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09;詳解一、抽象工廠模式簡介 抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09; 是一種 創建型設計模式&#xff08;對象創建型模式&#xff09;&#xff0c;它提供了一種創建一系列相關或相互依賴對象…

Android初學者系統開發學習路線參考

Android初學者系統開發學習路線參考 文章目錄Android初學者系統開發學習路線參考一、前言二、Android初學的學習計劃第一階段&#xff08;一個月&#xff09;UI相關學習&#xff1a;開發環境與 UI 基礎&#xff0c;第一周&#xff1a;UI 控件與布局進階&#xff0c;第二周&…

擴散LLM推理新范式:打破生成長度限制,實現動態自適應調節

隨著 Gemini-Diffusion&#xff0c;Seed-Diffusion 等擴散大語言模型&#xff08;DLLM&#xff09;的發布&#xff0c;這一領域成為了工業界和學術界的熱門方向。但是&#xff0c;當前 DLLM 存在著在推理時必須采用預設固定長度的限制&#xff0c;對于不同任務都需要專門調整才…

【ee類保研面試】其他類---計算機網絡

25保研er&#xff0c;希望將自己的面試復習分享出來&#xff0c;供大家參考 part0—英語類 part1—通信類 part2—信號類 part3—高數類 part100—self項目準備 文章目錄計算機網絡知識點大全**計算機網絡知識點總結**一、五層協議模型二、OSI七層模型補充三、TCP 與 UDP 及區別…

Python-機器學習(一)——特征工程

目錄 特征工程 一、特征提取 1、字典特征提取 2、文本特征提取 2.1 英文文本提取 2.2 中文文本提取 3、TF-IDF文本特征詞的重要程度特征提取 二、無量綱化-預處理 1 MinMaxScaler 歸一化 2 normalize歸一化 3 StandardScaler 標準化 三、特征降維 1、特征選擇 1.…

談談SQL計算存儲引擎中的索引和計算

背景 最近在這家公司做了一些事情&#xff0c;做的事情和以往的工作不太一樣&#xff0c;不一樣的點呢就是 之前我主要的工作是關注計算這方面&#xff0c;因為數據量大&#xff0c;研究的是怎么加速查詢&#xff0c;怎么研究規則去優化&#xff0c;怎么去解規則的bug等等。因為…

vscode.window.activeTextEditor 獲取不到 png 圖片路徑問題

vscode 的 extensions 插件開發時用 vscode.window.activeTextEditor?.document.uri 獲取不到編輯器打開的圖片路徑&#xff0c;文檔路徑可以獲取到。個人猜測因為圖片不能編輯&#xff0c;所以沒有 activeTextEditor 屬性吧。解決辦法&#xff1a;巧用右鍵獲取路徑和相對的路…

Java 大視界 -- Java 大數據在智能醫療手術機器人操作數據記錄與性能評估中的應用(390)

Java 大視界 -- Java 大數據在智能醫療手術機器人操作數據記錄與性能評估中的應用&#xff08;390&#xff09;引言&#xff1a;正文&#xff1a;一、傳統手術機器人的 “黑箱困境”&#xff1a;記不全、算不清、追不到1.1 設備與臨床的 “斷層”1.1.1 數據記錄 “太粗放”1.1.…

C++的結構體指針

結構體變量和結構體指針的區別特性結構體變量結構體指針存儲內容結構體的實際數據內存地址內存開銷結構體總大小固定4/8字節&#xff08;指針大小&#xff09;成員訪問運算符.->函數傳參時的行為值拷貝&#xff08;新副本&#xff09;地址傳遞&#xff08;操作原數據&#x…

pdf文件轉word免費使用幾個工具

在線工具&#xff08;無需安裝&#xff09; Smallpdf ? 核心功能&#xff1a; 網頁端直接操作&#xff0c;支持 PDF 與 Word 格式互轉 免費用戶每日限 2 次轉換&#xff08;免注冊&#xff09; 自動清除服務器文件&#xff0c;確保隱私安全 &#x1f517; 訪問鏈接&#xff1a…

Vue3 組件化開發

文章目錄前言組件化開發底部菜單 TabMenu父子組件相互傳數據父傳子&#xff1a;自定義屬性子傳父&#xff1a;自定義事件父子組件互傳案例插槽 slot多個插槽總結組件化開發總結Vue組件的基本組成子組件使用的三個步驟父子組件相互傳遞數據前言 提示&#xff1a;這里可以添加本…

服務器硬件電路設計之I2C問答(二):I2C總線的傳輸速率與上拉電阻有什么關系?

I2C 總線傳輸速率與上拉電阻關系密切。上拉電阻阻值決定總線電平切換速度&#xff1a;電阻越小&#xff0c;充放電電流越大&#xff0c;信號邊沿更陡&#xff0c;支持更高速率&#xff08;如 400kHz 快速模式&#xff09;&#xff1b;電阻過大則切換慢&#xff0c;限制速率&…

大語言模型提示工程與應用:LLMs文本生成與數據標注實踐

提示詞應用實踐 學習目標 本課程通過LLMs生成情感分析樣本和標注葡萄9品鑒數據&#xff0c;展示了其文本生成和數據標注能力。同時&#xff0c;利用PAL模型解決日期計算問題&#xff0c;學習了LLMs與編程運行時結合實現復雜推理的方法&#xff0c;為自然語言處理應用提供了實…

node.js 零基礎入門

Node.js 零 基礎入門與核心語法 適用對象&#xff1a;完全沒接觸過 Node.js 的同學 目標&#xff1a;從 0 到能寫 CLI、小型 HTTP 服務、文件腳本、調用系統/網絡資源 目錄 什么是 Node.js安裝與運行運行腳本與 REPL模塊體系&#xff1a;CommonJS 與 ES Modules基礎語法在 Node…

《Day3-PyTorch 自動微分入門:從計算圖到梯度下降的實踐指南》

八、自動微分自動微分模塊torch.autograd負責自動計算張量操作的梯度&#xff0c;具有自動求導功能。自動微分模塊是構成神經網絡訓練的必要模塊&#xff0c;可以實現網絡權重參數的更新&#xff0c;使得反向傳播算法的實現變得簡單而高效。1. 基礎概念張量Torch中一切皆為張量…

apache cgi測試

test.cgi #!/bin/sh echo "Content-type: text/html" echo "" echo "<h1>Hello from a Mac CGI script!</h1>" echo "<p>Current time is: $(date)</p>"?% 放置目錄 /opt/homebrew/Cellar/mapserver/8.4.0_1…

力扣 30 天 JavaScript 挑戰 第二題筆記

這道題是涉及知識–閉包 1. 閉包定義以及相關知識點 官方定義為&#xff1a;在 JavaScript 中&#xff0c;函數具有對在相同作用域以及任何外部作用域中聲明的所有變量的引用。這些作用域被稱為函數的 詞法環境。函數與其環境的組合被稱為 閉包。 簡單理解&#xff1a;內層函數…

OpenAI GPT-5 深度解析:API Key定價與ChatGPT(Free, Plus, Pro)用戶的區別

前言&#xff1a;兩年等待&#xff0c;只為這一躍 在科技圈長達兩年的屏息期待與無盡猜想之后&#xff0c;2025年8月8日北京時間凌晨&#xff0c;OpenAI終于揭開了其新一代旗艦模型——GPT-5的神秘面紗。這不僅僅是一次常規的產品迭代&#xff0c;更被整個行業視為一塊試金石&a…

ClickHouse集群部署實踐---3分片2副本集群

ClickHouse集群部署實踐—3分片2副本集群 未完待續。。。 喜歡的先點贊收藏&#xff01;&#xff01; 由于我們準備部署的是3分片2副本的集群&#xff0c;現在來解釋一下配置參數的意思&#xff1a; shard標簽代表分片的意思&#xff0c;如上圖我們有3個分片&#xff0c;clickh…