当前位置: 首页 > article >正文

介绍我经常使用的两款轻便易用的 JSON 工具

第一款是 Chrome Extension,名叫 JSON Viewer Pro,可以在 Chrome 应用商店下载:

点击右上角的 JSON Input,然后可以直接把 JSON 字符串内容粘贴进去,也直接直接加载本地 JSON 文件。

可以在树形显示和图形显示两种模式下切换。

另一款是绿色软件,只有一个 exe 文件,名叫 JSON Viewer.

JSON Viewer 可以在个人,教育和非商用用途等场合免费使用。

也能支持以树形结构查看 JSON 文件内容:

再谈谈 JSON Schema 在辅助进行 JSON 内容校验时起的作用。

在软件开发的过程中,尤其是涉及到数据传输和数据验证时,JSON(JavaScript Object Notation)已经成为一种常见的标准格式。由于它的轻量级、易读性和广泛支持,JSON 被大量应用于客户端和服务器之间的数据交换。然而,在处理 JSON 数据时,如何确保接收到的内容符合预期的结构和数据类型是一个关键问题。为了解决这一问题,JSON Schema 被引入,用于定义 JSON 数据的结构和验证规则。

JSON Schema 的作用

JSON Schema 就像一个数据结构的描述语言,它允许开发者为 JSON 对象定义严格的结构和规则。它通过提供一系列约束条件(例如属性的类型、是否必填、属性的格式等)来保证 JSON 数据符合预期要求。具体而言,JSON Schema 在以下几个方面发挥着重要作用:

  1. 定义数据结构:JSON Schema 可以为一个 JSON 对象指定哪些属性是必需的,哪些是可选的,还可以定义每个属性的数据类型(例如字符串、整数、布尔值等)。这使得数据的结构性得以保持,避免了因数据格式不正确而导致的系统错误。

  2. 数据验证:通过 JSON Schema,开发者可以定义特定规则以确保接收到的 JSON 数据是有效的。比如,字符串的长度限制、数字的取值范围、数组元素的最大最小个数等等。这种严格的校验机制在数据传输和存储时,确保数据的完整性和一致性。

  3. 文档化和沟通:JSON Schema 还起到了文档的作用。通过定义清晰的结构,开发者可以非常容易地与其他团队沟通,特别是在前后端分离开发时,后端服务返回的数据结构可以通过 JSON Schema 来明确告诉前端开发者,以确保前端开发人员对接数据时无歧义。

JSON Schema 校验的工作流程

在实际的工作流程中,JSON Schema 通常在以下几个步骤中扮演重要角色:

  1. 定义 Schema:开发者首先根据业务需求定义一个 JSON Schema,它包含了数据格式、数据类型、属性的必需性、数据范围等信息。

  2. 生成 JSON 数据:根据需求,生成符合 JSON Schema 的数据。此时,JSON 数据可以被任何支持 JSON 格式的应用程序读取和使用。

  3. 校验 JSON 数据:当 JSON 数据从外部系统(例如 API 请求)进入应用程序时,使用 JSON Schema 来验证数据的结构是否符合预期的格式。例如,在接收到数据时,可以通过一个 JSON Schema 校验器(如 Ajv 这样的库)对数据进行校验,如果不符合 Schema,校验器会返回错误信息。

具体的例子

为了让这一过程更加具体化,下面通过一个真实的场景来详细说明 JSON Schema 在 JSON 校验中的实际应用。

场景:用户注册系统

假设我们在开发一个用户注册系统,用户需要提交以下信息:

  • 用户名(username):必须是一个字符串,长度在 3 到 20 个字符之间。
  • 密码(password):必须是一个字符串,长度在 8 到 100 个字符之间。
  • 年龄(age):必须是一个整数,范围在 18 到 120 之间。
  • 邮箱(email):必须是一个有效的电子邮件地址。

对于这个场景,我们可以定义一个对应的 JSON Schema,用于验证用户提交的数据。

定义 Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20
    },
    "password": {
      "type": "string",
      "minLength": 8,
      "maxLength": 100
    },
    "age": {
      "type": "integer",
      "minimum": 18,
      "maximum": 120
    },
    "email": {
      "type": "string",
      "format": "email"
    }
  },
  "required": ["username", "password", "age", "email"]
}

这个 Schema 详细地定义了每个属性的类型和约束。以下是对各个字段的解释:

  • username 必须是一个长度在 3 到 20 个字符之间的字符串。
  • password 必须是一个长度在 8 到 100 个字符之间的字符串。
  • age 必须是一个整数,并且值在 18 到 120 之间。
  • email 必须符合电子邮件的格式要求。

此外,Schema 中通过 required 关键字明确了哪些字段是必填的,即用户必须提供 usernamepasswordageemail 这些信息。

校验过程

当用户提交注册信息时,后台会通过校验器对提交的数据进行校验。例如,假设用户提交的数据如下:

{
  "username": "JohnDoe",
  "password": "mySecurePassword123",
  "age": 25,
  "email": "johndoe@example.com"
}

校验器会对照 Schema 对数据进行验证。由于此时提交的数据完全符合 JSON Schema 的定义,所以校验会通过,系统可以进一步处理用户注册信息。

但如果用户提交的数据如下:

{
  "username": "JD",
  "password": "pass123",
  "age": 17,
  "email": "invalid-email-format"
}

在这种情况下,JSON Schema 校验器会报告以下错误:

  1. username 的长度不足 3 个字符。
  2. password 的长度不足 8 个字符。
  3. age 的值小于 18,不符合要求。
  4. email 字段的格式不正确,不是有效的电子邮件地址。

这时,系统可以向用户返回详细的错误信息,要求其重新提交符合要求的数据。这种自动化的校验不仅减少了手动编写验证代码的工作量,也保证了数据的准确性和安全性。

JSON Schema 的实际应用场景

API 开发与数据校验

在现代的 Web 应用开发中,前后端通常是分离的,前端通过 API 与后端进行数据交互。在这种情况下,JSON Schema 非常适合用于定义 API 接口的数据结构。通过事先定义好 Schema,后端可以确保前端传递过来的数据符合预期,而前端也可以根据 Schema 生成对应的输入表单或进行前端验证。

配置文件的验证

许多应用程序会使用 JSON 格式的配置文件来保存系统的配置参数。例如,一个微服务应用可能需要配置数据库连接、缓存策略等重要参数。通过 JSON Schema,开发者可以定义这些配置文件的结构,并在应用启动时对配置文件进行自动校验,以确保没有错误的参数配置。

数据迁移与验证

在数据迁移和转换的场景中,JSON Schema 也扮演了关键角色。例如,在进行数据库表的迁移或系统升级时,开发者可以使用 JSON Schema 来验证迁移过程中数据的完整性和一致性。通过对数据进行校验,能够有效防止错误的数据进入新的系统。

进一步扩展:JSON Schema 的高级特性

JSON Schema 不仅支持基本的类型验证,还支持更复杂的验证规则。以下是一些常见的高级特性:

  • 模式继承:可以通过 $ref 关键字引用其他 Schema,从而实现 Schema 的复用。例如,一个用户注册的 Schema 可以复用用户登录的 Schema,因为二者的结构在某些部分是相似的。

  • 正则表达式匹配:对于字符串类型,JSON Schema 支持通过正则表达式来验证格式。例如,确保电话号码符合特定的格式。

  • 条件验证:通过 ifthenelse 关键字,开发者可以根据特定条件对数据进行不同的验证。例如,某个字段的值为 true 时,要求另一个字段也必须出现。

结论

JSON Schema 在现代软件开发中扮演了至关重要的角色。它不仅为 JSON 数据提供了结构化的验证机制,还大大减少了手动编写验证逻辑的工作量,并确保了系统数据的一致性和完整性。通过清晰定义数据结构,JSON Schema 使得开发者能够更容易地在不同系统和团队之间进行沟通与协作。同时,它也为数据校验提供了一种标准化的方式,使得数据的验证过程更加透明和可靠。


http://www.kler.cn/news/326237.html

相关文章:

  • 2024年第一批因AI失业的人,已经出现了
  • 【hot100-java】【寻找重复数】
  • springboot电影售票系统小程序—计算机毕业设计源码36991
  • C++那些事之内存优化
  • Matlab_与CANoe联合仿真方案基础环境搭建
  • 基于微信小程序的美食外卖管理系统
  • 南沙C++信奥赛陈老师解一本通题 1269:【例9.13】庆功会
  • phpstudy简易使用
  • 基于OpenCV的实时年龄与性别识别(支持CPU和GPU)
  • AI多模态基础知识点:LLM小白也能看懂的分词(tokenization)解读
  • Zookeeper下载、安装配置
  • 从画质设置看游戏引擎(其一)
  • 正点原子阿波罗STM32F429IGT6移植zephyr rtos(二)---使用I2C驱动MPU6050
  • 使用apipost工具导入通过swag生成的golang接口文档步骤
  • 思科安全网络解决方案
  • FIOT/浙江信达可恩消防股份有限公司25周年庆典隆重召开
  • 【JavaEE初阶】网络原理
  • 大盘点|9月独家爆款SVG模版(互斥伸长、扑克出牌、预感应滑动等)
  • 【C#生态园】构建高效PDF应用:全面解析C#六大PDF生成库
  • Linux date命令(用于显示和设置系统的日期和时间,不仅可以显示时间,还能进行复杂的时间计算和格式化)
  • 苍穹外卖学习笔记(十四)
  • 【JavaEE】——CAS指令和ABA问题
  • 【Android】获取备案所需的公钥以及签名MD5值
  • Mybatis中遍历List内容进行动态SQL拼接
  • LeetCode 461. 汉明距离
  • 实战OpenCV之图像滤波
  • 记录一次排查sql server 服务调用异常的问题
  • 1.2.1 HuggingFists安装说明-Linux安装
  • Tableau|一入门
  • k8s基于nfs创建storageClass