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

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

相关推荐
Geoking.12 小时前
JSON vs JSONL:从数据格式到 AI Agent 的工程实践
人工智能·深度学习·json
ID_1800790547315 小时前
京东商品详情API能力解析与标准化应用方案(含JSON返回示例)
json
灯澜忆梦2 天前
Go 语言 _JSON---序列化与反序列化
开发语言·golang·json
梦幻通灵3 天前
Notepad++格式化Json两种方案【持续更新】
android·json·notepad++
解局易否结局3 天前
鸿蒙原生开发实战|Native JSON 编解码与高性能数据序列化
华为·json·harmonyos
代码的小搬运工3 天前
网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
网络·数据库·json
2601_960906723 天前
网络防御等最先进AI模型领域
人工智能·json·hbase·flume·storm
前网易架构师-高司机5 天前
带标注的山体滑坡塌方数据集数据集,识别率78.1%,974张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·自然灾害·山体滑坡
前网易架构师-高司机5 天前
带标注的SDD-SAR遥感船舶识别数据集,识别率92.9%,7000张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·遥感·sar·船舶·sdd
酉鬼女又兒6 天前
零基础入门Vibe Coding实战:从RAG项目开发到测试部署全流程指南
开发语言·人工智能·机器学习·json