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

news2024/12/24 11:38:40

第一款是 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.coloradmin.cn/o/2179998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝自动下单退货RPA自动化脚本(已运行两个月)

使用AdsPower Browser写的两个自动化脚本,一个下单一个退货,我也不知道他为什么要做这个自动化脚本,运行2个月时间,还蛮稳定,可以多窗口并发运行! 下单指定淘宝商品连接,执行下单RPA脚本实现自动操作。 退…

模糊测试SFuzz亮相第32届中国国际信息通信展览会

9月25日,被誉为“中国ICT市场的创新基地和风向标”的第32届中国国际信息通信展在北京盛大开幕,本次展会将在为期三天的时间内,为信息通信领域创新成果、尖端技术和产品提供国家级交流平台。开源网安携模糊测试产品及相关解决方案精彩亮相&…

Flux最新ControlNet 高清修复模型测评,效果好速度快!

上一篇介绍了Jasper AI 发布了三个模型中的法线贴图,没看过的可以看一下哈: Flux目前最快ControlNet模型现身!法线贴图详细测评 (chinaz.com) 这次再介绍一下另一个模型:升频器,可以有比较好的模糊修复效果&#xff…

一条命令Docker安装常用桌面linux系统含一些系统和应用

分类 一. opens use 15.5 desktop https://hub.docker.com/r/kasmweb/opensuse-15-desktop 这是我最近用的一个,稳定性和性能好过ubuntu,兼容性稍微差,部分依赖无法安装,部分软件运行不起来,界面比ubuntu的要好看.风格是win10的.提供一个开源的webVNC, 可选,但是桌面必定要用…

AIGC专栏16——CogVideoX-Fun V1.1版本详解 支持图文生视频与更大的动态性 为文生视频添加控制

AIGC专栏16——CogVideoX-Fun V1.1版本详解 支持图&文生视频与更大的动态性 为文生视频添加控制 学习前言相关地址汇总源码下载地址HF测试链接 CogVideoX-Fun V1.1详解技术储备Diffusion Transformer (DiT)Stable Diffusion 3EasyAnimate-I2V 算法细节V1.1特点参考图片添加…

20.1 分析pull模型在k8s中的应用,对比push模型

本节重点介绍 : push模型和pull模型监控系统对比为什么在k8s中只能用pull模型的k8s中主要组件的暴露地址说明 push模型和pull模型监控系统 对比下两种系统采用的不同采集模型,即push型采集和pull型采集。不同的模型在性能的考虑上是截然不同的。下面表格简单的说…

二、Spring Boot集成Spring Security之实现原理

Spring Boot集成Spring Security之实现原理 一、Spring Security实现原理概要介绍二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterCha…

Java SE 总结

Java SE(Standard Edition)是Java编程语言的标准版本,提供了基础的编程环境和API,适用于开发和运行Java应用程序。下面是Java SE的几个重要方面的知识回顾与总结。 1. Java环境基础 具体可参考这里对三者的介绍 传送门 1.1 JVM…

后端-对表格数据进行添加、删除和修改

一、添加 要求: 按下添加按钮出现一个板块输入添加的数据信息,点击板块的添加按钮,添加;点击取消,板块消失。 实现: 1.首先,设计页面输入框格式,表格首行 2.从数据库里调数据 3.添加…

SpringBoot助力墙绘艺术市场创新

3 系统分析 当用户确定开发一款程序时,是需要遵循下面的顺序进行工作,概括为:系统分析–>系统设计–>系统开发–>系统测试,无论这个过程是否有变更或者迭代,都是按照这样的顺序开展工作的。系统分析就是分析系…

数字化智能工厂应用场景

数字化智能工厂的应用场景广泛,涵盖了多个行业和领域。以下是一些主要的应用场景: 一、制造业 汽车制造:数字化智能工厂在汽车制造业中得到了广泛应用。通过自动化生产线、机器人、物联网和人工智能等技术,汽车制造商能够实现高…

三分钟速览:Node.js 版本差异与关键特性解析

Node.js 是一个广泛使用的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。随着技术的发展,Node.js 不断推出新版本,引入新特性和改进。了解不同版本之间的差异对于开发者来说至关重要。以下是一个快速指南,帮…

Redis篇(应用案例 - 附近商户)(持续更新迭代)

目录 一、GEO数据结构的基本用法 二、导入店铺数据到GEO 三、实现附近商户功能 一、GEO数据结构的基本用法 GEO就是Geolocation的简写形式,代表地理坐标。 Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来…

【高性能内存池】基本框架 + 固定长度内存池实现 1

高性能内存池 1. 基本框架2. 定长内存池的实现2.1 介绍定长内存池2.2 T* New()2.3 void Delete(T* obj) 3. 源码(附赠测试)4. 总结 1. 基本框架 高并发内存池主要由三个部分构成: 1.thread cache:用于小于256KB的内存的分配。线程缓存是每个…

opencv实战项目(三十):使用傅里叶变换进行图像边缘检测

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一,什么是傅立叶变换?二,图像处理中的傅立叶变换:三,傅里叶变换进行边缘检测: 一&#xff0c…

适合初学者的[JAVA]: 基础面试题

目录 说明 前言 String/StringBuffer/StringBuilder区别 第一点: 第二点: 总结: 反射机制 JVM内存结构 运行时数据区域被划分为5个主要组件: 方法区(Method Area) 堆区(Heap Area) 栈区&#x…

局部整体(七)利用python绘制圆形嵌套图

局部整体(七)利用python绘制圆形嵌套图 圆形嵌套图( Circular Packing)简介 将一组组圆形互相嵌套起来,以显示数据的层次关系,类似于矩形树图。数据集中每个实体都由一个圆表示,圆圈大小与其代…

Spring Task 调度任务

Spring Task是调度任务框架,通过配置,程序可以按照约定的时间自动执行代码逻辑,基于注解方式实现需要如下注解: Component 任务调度类交给Spring IOC容器管理EnableScheduling 启用 Spring 的定时任务(Scheduling&…

专业学习|随机规划概观(内涵、分类以及例题分析)

一、随机规划概览 (一)随机规划的定义 随机规划是通过考虑随机变量的不确定性来制定优化决策的一种方法。其基本思想是在决策过程中,目标函数和约束条件可以包含随机因素。 (1)重点 随机规划的中心问题是选择参数&am…

最新版ingress-nginx-controller安装 使用host主机模式

最新版ingress-nginx-controller安装 使用host主机模式 文章目录 最新版ingress-nginx-controller安装 使用host主机模式单节点安装方式多节点高可用安装方式 官方参考链接: https://github.com/kubernetes/ingress-nginx/ https://kubernetes.github.io/ingress-ng…