JSON Schema详解!JSON格式

引言

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

JSON Schema 的格式

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

示例1

javascript 复制代码
{  
  "$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 版本。
  • 是否可省略:可以省略,但推荐保留以便明确版本。
titledescription
  • 作用:提供 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" 时使用,定义对象中的属性及其类型、约束等。

  • 示例

    javascript 复制代码
    "properties": {  
      "name": {"type": "string"},  
      "age": {"type": "integer", "minimum": 0, "maxinum": 10}  
    }
required
  • 作用:定义 JSON 对象中必须存在的属性列表。
  • 示例"required": ["name", "age"] 表示 JSON 对象中必须包含 nameage 属性。
minimummaximum
  • 作用:用于定义数字的最小值和最大值。
  • 示例:如上

示例2

javascript 复制代码
{  
  "$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" 时使用,定义数组元素的类型或结构。

  • 示例

    javascript 复制代码
    "type": "array",  
    "items": {  
      "type": "string",  
      "maxLength": 5  
    }

enum

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

示例:如上

format

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

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

exclusiveMinimumexclusiveMaximum

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

minLengthmaxLength

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

pattern

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

相关推荐
╰⋛⋋⊱⋋翅膀⋌⊰⋌⋚╯4 小时前
cJSON使用
json
正在走向自律18 小时前
从Oracle到金仓KES:PL/SQL兼容性与高级JSON处理实战解析
数据库·sql·oracle·json·金仓数据库·电科金仓·兼容性挑战
皮卡龙1 天前
Java常用的JSON
java·开发语言·spring boot·json
@#---1 天前
如何准确判断json文件并且拿到我想要的信息
android·python·json
WarPigs2 天前
Unity添加Newtonsoft.json
json
张彦峰ZYF2 天前
巨大 JSON / 图结构数据架构层面选型:该放 Redis 还是 MongoDB?
redis·架构·json·巨大json/图结构架构选型·redis-mongodb
一颗不甘坠落的流星2 天前
【Antd】基于 Upload 组件,导入Json文件并转换为Json数据
前端·javascript·json
亮子AI2 天前
application/json 服务器收到的是字符串,还是json对象?
运维·服务器·json
im_AMBER3 天前
weather-app开发手记 02 JSON基础 | API 调用 400 错误修复 | JWT 认证问题
笔记·学习·json·axios·jwt
Irene19913 天前
Prettier 配置文件 .prettierrc.js 和 .prettierrc.json 的区别
javascript·json