当前位置: 首页 > news >正文

JSON Schema

前言:

JSON Schema是用来效验json数据是否符合预期的

安装:

pip install jsonschema==4.23.0

1.json数据和json Schema对比

json数据

{"name": "张三","age": 26,"address": {"province": "上海","district": "浦东","postalCode": "200000"},"phoneNumbers": [{"type": "mobile","number": "+86-12345678912"},{"type": "office","number": "021-12345678"}]
}

json Schema:

{"$schema": "http://json-schema.org/draft-07/schema#","type": "object","properties": {"name": {"type": "string"},"age": {"type": "integer"},"address": {"type": "object","properties": {"province": {"type": "string"},"district": {"type": "string"},"postalCode": {"type": "string"}},"additionalProperties": false,"required": ["province","district","postalCode"]},"phoneNumbers": {"type": "array","items": {"type": "object","properties": {"type": {"type": "string"},"number": {"type": "string"}},"additionalProperties": false,"required": ["type","number"]}}},"additionalProperties": false,"required": ["name","age","address","phoneNumbers"]
}

2.基本结构

JSON Schema 本身是一个 JSON 对象,包含以下常见关键字:
◦ $schema:指定使用的 Schema 版本(如 "http://json-schema.org/draft-07/schema#")。
◦ type:定义数据类型(如 string、number、array、object)。
◦ properties:描述对象中的字段及其子 Schema。
◦ required:标记必填字段列表。
◦ additionalProperties:是否允许未定义的额外字段。

3.数据类型

type解释
string字符串类型,⽤于⽂本数据。
number数字类型,⽤于表⽰浮点数。
integer整数类型,⽤于表⽰整数。
boolean布尔类型,值为 true 或 false。
object对象类型,⽤于嵌套的 JSON 对象。
array数组类型,⽤于列表或集合。
null空值类型。

properties 是⼀个验证关键字。当你定义 properties 时,你创建了⼀个对象,其

中每个属性代表正在验证的 JSON 数据中的⼀个键。

4.效验:

4.1最大值和最小值

minimum 和 maximum :指定数值的最⼩值和最⼤值。
exclusiveMinimum 和 exclusiveMaximum :指定数值必须严格⼤于或⼩于某个值(不包含等于)。

示例代码:

{"type": "number","minimum": 10,"maximum": 100,"exclusiveMinimum": 9.5,"exclusiveMaximum": 101
}

4.2字符串特殊效验

pattern :使⽤正则表达式来验证字符串是否符合特定的模式。

{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"username": {
"type": "string",
"pattern": "\S+"
}
}
}

4.3数组约束

1.minItems 和 maxItems :指定数组的最⼩和最⼤⻓度。

2.uniqueItems :确保数组中的元素是唯⼀的。

3.items :定义数组中每个元素的类型和约束。

{
"type": "object",
"properties": {"tags": {"type": "array","items": { "type": "string" },"minItems": 1,"uniqueItems": True}}
}

4.4对象约束

1、minProperties 和 maxProperties :指定对象的最⼩和最⼤属性数量。

2、additionalProperties :控制是否允许对象中存在未在 properties 中定义的额外属性,默

认为True。

{"type": "object","properties": {"name": { "type": "string" }},"minProperties": 1,"additionalProperties": False
}

4.5必须属性

通过 required 关键字,JSON Schema 可以指定哪些属性是必需的。如果 JSON 实例中缺少这些必需属性,验证将失败。

{"type": "object","properties": {"name": { "type": "string" },"email": { "type": "string" }},"required": ["name", "email"]
}

4.6依赖关系

dependentRequired 可以定义属性之间的依赖关系。例如,如果某个属性存在,则必须存在另⼀个属性。

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

"creditCard"依赖于"billingAddress"

"creditCard"存在,那么"billingAddress"也一定存在,否则报错

http://www.lryc.cn/news/609947.html

相关文章:

  • mybatis-plus报错Caused by: java.sql.SQLException: 无效的列类型: 1111
  • 使用 Aspose.OCR 将图像文本转换为可编辑文本
  • 微软WSUS替代方案
  • Druid手写核心实现案例 实现一个简单Select 解析,包含Lexer、Parser、AstNode
  • AJAX表单验证项目实战:实时用户名检查
  • curl发送文件bodyParser无法获取请求体的问题分析
  • Stanford CS336 assignment1 | Byte-Pair Encoding (BPE) Tokenizer
  • NeoBase:一款开源、基于AI的数据库管理助手
  • 《Python 实用项目与工具制作指南》· 2.2 变量
  • Java中给List<T> 对象集合去重
  • golang的数组
  • SpringMVC 6+源码分析(三)DispatcherServlet实例化流程 2--(url 与contrller类如何进行映射)
  • 【Spring AI快速上手 (一)】ChatModel与ChatCilent构建对话
  • 小鹏汽车前端面经
  • Python+QT开发环境搭建
  • 数据从mysql迁移到postgresql
  • 纯前端导出Excel
  • MCP安全机制深度剖析:权限控制与数据保护最佳实践
  • 体验Java接入langchain4j运用大模型OpenAi
  • 学习游戏制作记录(角色属性和状态脚本)8.4
  • 多源异构信号同步采集与赛道数据融合技术解析
  • 迅为RK3568开发板OpeHarmony学习开发手册-修改调试串口波特率
  • codeBuddy IDE 使用教程
  • 零售行业线上线下融合趋势,华为云智能零售解决方案,在门店运营与电商业务中的技术应用与场景实践
  • Qt 自动无法加载数据库为空
  • SP20D120CTR碳化硅二极管详解:高性能与广泛应用
  • 最小二乘法MSE
  • 嵌入式开发学习———Linux环境下IO进程线程学习(三)
  • AtCoder Beginner Contest 416 C 题
  • 同质无向加权图:理论基础、算法演进与应用前沿