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

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

相关推荐
Car123 小时前
在vscode中添加一个tasks.json实现 rt thread的scons编译功能
vscode·json·build·scons
学习3人组3 小时前
基于 主表 + JSON 自定义字段的条件查询
json
XMYX-014 小时前
28 - Go JSON 数据操作
开发语言·golang·json
Promise微笑1 天前
Geo专家于磊:Json-LD优化实战SOP与双核四驱体系
大数据·人工智能·重构·json
专注VB编程开发20年1 天前
json和python元组,列表,字典对比
开发语言·python·json·php
奇树谦1 天前
深度解析 compile_commands.json:源码到目标码映射的核心枢纽
json
alwaysrun1 天前
C++之轻量级JSON序列库jsoncpp
c++·json·编程语言
彭于晏Yan1 天前
HttpServletRequest 如何读取JSON请求体
spring boot·后端·json
csdn小瓯1 天前
结构化输出实战:Pydantic Schema约束LLM生成JSON
json·状态模式
Dxy12393102162 天前
Python请求方式介绍:JSON、表单及其他常见数据传输格式
数据库·python·json