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

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

相关推荐
Yn31217 小时前
在 Python 中使用 json 模块的完整指南
开发语言·python·json
陈涛5753 天前
5个最好用的 JSON 工具推荐:让数据处理变得简单高效
json
bkspiderx4 天前
pb2json.hpp 文档:Protobuf 与 JSON 通用转换工具类
json·protobuf·protobuf与json转换
万粉变现经纪人5 天前
何解决PyCharm中pip install安装Python报错ModuleNotFoundError: No module named ‘json’问题
python·pycharm·json·beautifulsoup·scikit-learn·matplotlib·pip
晨欣5 天前
orjson 与 json:实战对比与选型指南(含示例)(GPT-5 回答)
gpt·json
Pi_Qiu_6 天前
Python初学者笔记第二十二期 -- (JSON数据解析)
笔记·python·json
mon_star°6 天前
有趣的 npm 库 · json-server
前端·npm·json
ID_180079054736 天前
淘宝拍立淘按图搜索API接口功能详细说明
大数据·python·json·图搜索算法
cypking6 天前
vue excel转json功能 xlsx
vue.js·json·excel
我又来搬代码了6 天前
【Android】【bug】Json解析错误Expected BEGIN_OBJECT but was STRING...
android·json·bug