问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

JSON Schema 入门指南:如何定义和验证 JSON 数据结构

创作时间:
作者:
@小白创作中心

JSON Schema 入门指南:如何定义和验证 JSON 数据结构

引用
CSDN
1.
https://blog.csdn.net/mss359681091/article/details/145877524

在现代Web开发和数据交换中,JSON(JavaScript Object Notation)已经成为了一种非常流行的数据格式。它轻量、易读、易于解析,广泛应用于API通信、配置文件、数据存储等场景。然而,随着JSON数据结构的复杂性增加,如何确保JSON数据的有效性和一致性成为了一个挑战。这时,JSON Schema就派上了用场。本文将带你入门JSON Schema,帮助你理解它的基本概念、语法结构,并通过实例演示如何使用JSON Schema来定义和验证JSON数据结构。

什么是 JSON Schema?

JSON Schema是一种用于描述JSON数据结构的规范。它允许你定义JSON数据的格式、类型、约束条件等,从而确保JSON数据符合预期的结构。通过JSON Schema,你可以在数据交换、存储或处理之前,对JSON数据进行验证,确保其有效性和一致性。

简单来说,JSON Schema就像是JSON数据的“蓝图”或“合同”,它规定了JSON数据应该长什么样子。

JSON Schema 的基本结构

一个JSON Schema本身也是一个JSON对象。它由一系列关键字(keywords)组成,这些关键字用于定义JSON数据的结构和约束条件。

基本关键字

  • $schema:指定使用的JSON Schema版本。例如,"$schema": "http://json-schema.org/draft-07/schema#"表示使用Draft 7版本的JSON Schema。
  • $id:为Schema定义一个唯一的标识符,通常是一个URL。
  • titledescription:分别为Schema提供标题和描述信息,便于理解和维护。
  • type:定义JSON数据的类型。常见的类型有objectarraystringnumberintegerbooleannull

对象属性

  • properties:定义对象中的各个属性及其对应的Schema。
  • required:指定哪些属性是必须的。
  • additionalProperties:控制是否允许对象包含未在properties中定义的额外属性。

数组元素

  • items:定义数组中每个元素的Schema。
  • minItemsmaxItems:分别指定数组的最小和最大长度。
  • uniqueItems:指定数组中的元素是否必须唯一。

字符串约束

  • minLengthmaxLength:分别指定字符串的最小和最大长度。
  • pattern:使用正则表达式约束字符串的格式。
  • format:指定字符串的格式,如email、date-time等。

数值约束

  • minimummaximum:分别指定数值的最小和最大值。
  • exclusiveMinimumexclusiveMaximum:指定数值是否排除最小值和最大值。
  • multipleOf:指定数值必须是某个数的倍数。

示例:定义一个简单的 JSON Schema

假设我们要定义一个表示用户信息的JSON数据结构,要求如下:

  • 用户对象必须包含idnameemail属性。
  • id必须是整数。
  • name必须是字符串,且长度在1到50之间。
  • email必须是有效的电子邮件地址。
  • 用户对象可以包含可选的age属性,且必须是正整数。

对应的JSON Schema可以这样定义:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://example.com/user.schema.json",
  "title": "User",
  "description": "A user object",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "age": {
      "type": "integer",
      "minimum": 0,
      "exclusiveMinimum": true
    }
  },
  "required": ["id", "name", "email"],
  "additionalProperties": false
}

解释

  • $schema$id分别指定了Schema的版本和唯一标识符。
  • type指定了JSON数据的类型为object
  • properties定义了对象的各个属性及其约束条件。
  • required指定了idnameemail是必须的属性。
  • additionalProperties设置为false,表示不允许对象包含未定义的属性。

使用 JSON Schema 进行验证

定义好JSON Schema后,我们可以使用各种工具和库来验证JSON数据是否符合该Schema。以下是一些常用的验证工具:

  • JavaScript:可以使用Ajv库进行验证。
  • Python:可以使用jsonschema库进行验证。
  • 在线工具:可以使用JSON Schema Validator在线验证JSON数据。

示例:使用 Ajv 进行验证

假设我们有以下JSON数据:

{
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com",
  "age": 30
}

我们可以使用Ajv来验证该数据是否符合我们定义的Schema:

const Ajv = require('ajv');
const ajv = new Ajv();
const schema = {
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://example.com/user.schema.json",
  "title": "User",
  "description": "A user object",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "age": {
      "type": "integer",
      "minimum": 0,
      "exclusiveMinimum": true
    }
  },
  "required": ["id", "name", "email"],
  "additionalProperties": false
};
const data = {
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com",
  "age": 30
};
const validate = ajv.compile(schema);
const valid = validate(data);
if (valid) {
  console.log('数据有效');
} else {
  console.log('数据无效:', validate.errors);
}

如果数据符合Schema,输出将是数据有效;否则,输出将是数据无效并显示具体的错误信息。

实战效果

我们以Furion框架为例,Furion框架提供了完整的Furion和ASP.NET Core的JSON Schema文件,通过该文件可以在编写配置文件时提供完整的智能提示和校验。

如何使用

使用方式非常简单,只需要在.json文件的头部添加"$schema":"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",即可,如:

{
  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.EntityFrameworkCore": "Information",
      "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
    }
  },
  "AllowedHosts": "*"
}

怎么样,这会知道好处了把!!

总结

JSON Schema是一种强大的工具,可以帮助你定义和验证JSON数据的结构。通过使用JSON Schema,你可以确保JSON数据的有效性和一致性,减少数据错误和异常情况的发生。本文介绍了JSON Schema的基本概念、语法结构,并通过实例演示了如何定义和使用JSON Schema。

希望这篇入门指南能帮助你更好地理解和使用JSON Schema。如果你有更多问题或需要进一步的帮助,欢迎在评论区留言讨论!

参考资料:

  • JSON Schema 官方文档
  • Ajv 文档
  • JSON Schema Validator
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号