JSON Schema详解!JSON格式

ops/2024/10/20 4:08:38/

引言

JSON Schema 是一种用于描述和验证 JSON 数据结构的规范。它定义了 JSON 数据中各个元素的类型、格式、约束和关系,确保了数据的一致性和可靠性。在软件开发、API 设计以及数据交换过程中,JSON Schema 发挥着重要作用。本文将详细介绍 JSON Schema 的格式、关键字段以及具体案例。

JSON Schema 的格式

JSON Schema 本身也是一段 JSON 格式的数据,它通过键值对来定义 JSON 数据的结构和内容。以下是一个 JSON Schema 的基本结构示例:

示例1

{  "$schema": "http://json-schema.org/draft-07/schema#",  "title": "示例 Schema",  "description": "描述信息",  "type": "object",  "properties": {  "name": {  "type": "string",  "description": "名称"  },  "age": {  "type": "integer",  "minimum": 0,  "description": "年龄"  }  },  "required": ["name", "age"]  
}

针对上诉示例进行逐行讲解!

关键字段详解

$schema
  • 作用:指定 JSON Schema 的版本信息,例如 "http://json-schema.org/draft-07/schema#" 表示使用 JSON Schema 的 Draft 07 版本。
  • 是否可省略:可以省略,但推荐保留以便明确版本。
title 和 description
  • 作用:提供 JSON Schema 的标题和描述信息,帮助人类理解 Schema 的内容和目的。
  • 是否可省略:可以省略,但保留有助于文档化。
type
  • 作用:定义 JSON 数据的类型,如 "object""array""string""number""integer""boolean""null"
  • 示例
    • "type": "object" 表明 JSON 数据是一个对象。
    • "type": "array"表明 JSON 数据是一个列表。
    • "type": "string"表明 JSON 数据是一个字符串。
    • "type": "number"表明 JSON 数据是一个数字(可以是整型也可以是浮点型)。
    • "type": "integer"表明 JSON 数据是一个整型。
    • "type": "boolean"表明 JSON 数据是一个bool型。
    • "type": "null"表明 JSON 数据是一个空。
properties
  • 作用:在 type 为 "object" 时使用,定义对象中的属性及其类型、约束等。
  • 示例
    "properties": {  "name": {"type": "string"},  "age": {"type": "integer", "minimum": 0, "maxinum": 10}  
    }
required
  • 作用:定义 JSON 对象中必须存在的属性列表。
  • 示例"required": ["name", "age"] 表示 JSON 对象中必须包含 name 和 age 属性。
minimummaximum
  • 作用:用于定义数字的最小值和最大值。
  • 示例:如上

示例2

{  "$schema": "http://json-schema.org/draft-07/schema#",  "title": "复杂数组Schema示例",  "type": "array",  "uniqueItems": true,  "items": {  "type": "object",  "properties": {  "status": {  "type": "string",  "enum": ["active", "inactive", "pending"]  },  "startDate": {  "type": "string",  "format": "date-time",  "examples": ["2023-04-01T12:00:00Z"]  },  "age": {  "type": "number",  "exclusiveMinimum": 0,  "exclusiveMaximum": 150  },  "username": {  "type": "string",  "minLength": 3,  "maxLength": 20,  "pattern": "^[a-zA-Z0-9_]+$"  }  },  "required": ["status", "startDate", "age", "username"]  }  
}

关键字段详解

uniqueItems
  1. 作用:当typearray时,指定数组中的元素是否必须唯一
items
  • 作用:在 type 为 "array" 时使用,定义数组元素的类型或结构。
  • 示例
    "type": "array",  
    "items": {  "type": "string",  "maxLength": 5  
    }

enum

        作用:定义了一个值的集合,该字段的值必须是集合中的一个。

        示例:如上

format

        作用:用于定义字符串的格式,如emaildate-time等。

需要注意的是,format关键字的验证行为可能依赖于实现,因为它不是JSON Schema规范的核心部分。

exclusiveMinimumexclusiveMaximum

        作用:类似minimummaximum,额外表示边界值是否包含在允许的范围内。

minLengthmaxLength

        作用:用于定义字符串的最小和最大长度。

pattern

        作用:用于定义字符串必须匹配的正则表达式。


http://www.ppmy.cn/ops/92046.html

相关文章

零基础5分钟上手谷歌云GCP核心云开发技能 - 搭建和维护高可用数据库集群

简介: 欢迎来到小李哥全新谷歌云GCP云计算知识学习系列,适用于任何无云计算或者谷歌云技术背景的开发者,让大家零基础5分钟通过这篇文章就能完全学会谷歌云一个经典的服务开发架构方案。 我将每天介绍一个基于全球三大云计算平台&#xff0…

HTTP操作过程与用户点击鼠标后发生的事件的顺序有什么区别

HTTP操作过程与用户点击鼠标后发生的事件的顺序存在显著的区别。‌ 用户点击鼠标后发生的事件顺序主要涉及用户界面交互,‌包括:‌ 用户单击鼠标。‌ 浏览器分析链接指向页面的URL。‌ 浏览器向DNS请求解析域名的IP地址。‌ 域名系统DNS解析出服务器…

学习日志8.7--Security Zone防火墙安全区域

安全区域实验拓扑开始之前先通过一台主机和防火墙相连,设置主机的IP地址和网关,开启防火墙设置防火墙接口g1/0/1的IP地址为192.168.1.254,将防火墙设置为主机的网关,尝试能不能用主机ping通防火墙。尝试之后,发现失败&…

猎码安卓APP开发IDE,amix STUDIO中文java,HTML5开发工具

【无爱也能发电】Xili 2024/8/2 10:41:20 猎码安卓APP开发IDE,amix java开发工具 我研发这些只有一小部分理由是为了赚钱,更多是想成就牛逼的技术产品。 目前的产品就够我赚钱的,我持续更新就好了,没必要继续研究。 IDE不赚钱,谁…

创建型模式(Creational Patterns)之工厂模式(Factory Pattern)之工厂方法模式(Factory Method Pattern)

1. 工厂方法模式(Factory Method Pattern) 将对象的创建延迟到子类中实现,每个具体产品类都有一个对应的工厂类负责创建,从而使得系统更加灵活。客户端可以通过调用工厂方法来创建所需的产品,而不必关心具体的实现细节。这种模式符合开放-封闭…

C基础练习(学生管理系统)

1.系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令 2.开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。” 同理,当…

NSS [SWPUCTF 2022 新生赛]file_master

NSS [SWPUCTF 2022 新生赛]file_master 开题,一眼文件上传。 network看看返回包。后端语言是PHP。 除了文件上传还有个查看文件功能。 起手式查询/etc/passwd,发现查询方法是GET提交参数,后端使用file_get_contents()函数包含文件。同时有op…

如何确保工业交换机电源安全运行

在现代工业自动化和智能制造中,工业交换机作为网络通信的重要设备,其电源的安全运行显得尤为重要。为了确保工业交换机在各种恶劣环境下的稳定性与可靠性,我们需要采取一系列的措施和策略。首先,选择高质量的电源设备是基础&#…