Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用JSON Schema来验证接口数据

使用JSON Schema来验证接口数据

作者头像
IMWeb前端团队
发布于 2019-12-04 08:35:26
发布于 2019-12-04 08:35:26
2.2K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载

最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式,于是我想到之前lqlong 之前的一篇 《数据字段防卫探索》 发现JSON Schema可以做这个事情。

如果之前看我写的《使用joi来验证数据模型》 可能会问,为什么不使用JOI,反而使用JSON Schema?因为JOI这个nodejs库,除了验证格式,还带有验证字段关系的功能,库体积相对庞大,而且对于含有嵌套格式的JSON,用JOI来编写验证配置,极为繁琐。JSON Schema清晰简读,用来验证接口数据非常合适。

假设我们有一个期望JSON:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    users: [
        { id: 1, username: "zzbo", }
    ]
}

我们理解这个JSON结构如下:

  • 这个JSON对象有一个users的属性
  • 这个user属性是一个数组
  • 这个数组里面的元素是一个对象
  • 每一个对象里面包含了两个字段:id(Number),username(String)

用JSON Schema来描述这个JSON的结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type" : "object",
    "properties" : {
        "users" : {
            "type" : "array",
            "items" : {
                "type" : "object",
                "properties" : {
                    "id": { "type": "number" },
                    "username": { "type" : "string" }
                }
            }
        }
    }
}

描述一个JSON就是这么简单。

如果还嫌编写Shema麻烦,哪位高手来写一个根据JSON自动生成JSON Schema的工具。

DOJO已提供了JSON Schema来验证接口数据的功能:

dojo其实早已经这样干,我们可以借鉴。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 引入dojo的json schema验证模块
dojo.require("dojox.json.schema");

dojo.ready(function() {
    // 加载指定的schema
    dojo.xhrGet({
        url: 'schema.json',
        handleAs: 'json',
        load: function(schema) {

            // 拉取数据
            dojo.xhrGet({
                url: 'users.json',
                handleAs: 'json',
                load: function(users) {
                    // 使用 dojo 的 json schema验证模块来验证
                    var result = dojox.json.schema.validate(users, schema);
                    console.log(result); 
                }
            });
        }
    });    
});

如果验证合法则返回true, 否则他会返回一个错误信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    errors: [
        {
            message: "is missing and not optional",
            property: "users"
        }
    ]
    valid: false
}

然而,我们往往会担心数据的某个字段缺失,或者类型不是我们所期望的,然后程序中又疏忽于这些判断。如果我们要打造一个像dojo这样的json schema验证工具,除了validate功能,最好还会有一个fill功能,用于自动填充缺失的字段。

相关资料

JSON Schema 规范

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JSON Schema
JSON 作为通用的前后端交互,或者后台服务间通信的通用格式被大家广泛使用。我们肯定遇到过一些场景需要校验调用方传递过来的数据格式,比如一定要包含某些字段,某个字段一定要符合某种格式,比如定义了价格的字段,范围一定要在100~200之间,协议字段一定要是TCP或者UDP等枚举类型。你是否在你的用户代码里面自行实现这些判断逻辑呢?如果这样的规则越来越多是不是会显得代码很臃肿呢?这就是为什么要介绍我们今天的主角JSON Schema。JSON Schema定义了JSON格式的规范,各种语言都有开源的第三方JSON Schema校验库,例如Go语言的gojsonschema,这样我们就可以定义一份JSON Schema,然后系统的各个模块都可以复用这套JSON规范,不满足规则的数据JSON Schema会直接报错。
用户2937493
2019/11/12
2.8K0
python接口自动化34-json校验神器jsonschema
前面一篇讲到json解析神器jsonpath, jsonpath是为了方便快速取值,如果我们要校验json的字段类型和格式,就不是那边方便了。 比如当接口返回一个token,这个token值不是固定的,就算取到了也不好断言,这时候我们希望断言的是token的类型是字符串,长度是固定多少位。
上海-悠悠
2020/07/07
2.3K0
前后端数据校验和接口测试就没我 JSON Schema 干不了的活!
有一天,产品甩过来一个新的需求: 山月呀,「你对数据库中的用户完善用户姓名、用户邮箱、用户手机号,其中手机号必填」。
山月
2022/02/25
7870
前后端数据校验和接口测试就没我 JSON Schema 干不了的活!
json-schema入门
IMWeb前端团队
2017/12/28
2.7K0
json-schema入门
Json Schema 快速入门
Json schema 本身遵循Json规范,本身就是一个Json字符串,先来看一个例子
软测小生
2019/07/05
1.8K0
Node 如何在 Controller 层进行数据校验
幽默风趣的后端程序员一般自嘲为 CURD Boy。CURD, 也就是对某一存储资源的增删改查,这完全是面向数据编程啊。
山月
2020/09/01
1.5K0
使用joi来验证数据模型
我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式
IMWeb前端团队
2017/12/28
2.7K0
Understanding JSON Schema
可以表示的字符串如:"This is a string"、""、"Déjà vu"(unicode字符)
charlieroro
2022/05/09
6.6K0
这些前端新技术你很难再忽视了 —— JSON Schema
我们知道,JSON 作为主要的前后端交互格式,已经称霸多年了,json 的本质就是对象,它足够轻量、简单、易读,但是它也存在它的问题。
掘金安东尼
2022/08/22
1.2K0
PHP使用JSON Schema进行JSON数据验证和类型检查
JSON Schema是一个用于描述和验证JSON数据结构的规范。JSON Schema可以验证JSON数据是否符合指定的模式、类型和约束条件,同时还可以提供数据文档化的作用。
Tinywan
2024/04/15
4530
PHP使用JSON Schema进行JSON数据验证和类型检查
如何在 JSON 中编写“anyOf”语句?
在 JSON 中,anyOf 语句通常用于 JSON Schema(JSON 模式)中,来定义多个可能的模式,表示数据可以匹配多个子模式中的任意一个。这种功能常用于验证 JSON 数据是否符合某一组可能的条件之一。
华科云商小徐
2024/10/16
3320
接口自动化测试之JSON Schema模式该如何使用?
JSON Schema 模式是一个词汇表,可用于注释和验证 JSON 文档。在实际工作中,对接口返回值进行断言校验,除了常用字段的断言检测以外,还要对其他字段的类型进行检测。对返回的字段一个个写断言显然是非常耗时的,这个时候就需要一个模板,可以定义好数据类型和匹配条件,除了关键参数外,其余可直接通过此模板来断言,JSON Schema 可以完美实现这样的需求。
Hogwarts_测试
2022/08/08
1.2K0
JSON Schema基础入门
JSON,是一种轻量级的数据交换格式,基本结构是“名称/值”对的集合,非常易于人阅读和编写,也易于机器解析和生成。
xxpcb
2021/12/01
3.7K0
JSON Schema基础入门
【趣学程序】自定义一个JsonSchema
"$schema": "http://json-schema.org/draft-07/schema#",
趣学程序-shaofeer
2019/12/27
1.7K0
JSON Schema 介绍及应用
本文作者:IMWeb jerytang 原文出处:IMWeb社区 未经同意,禁止转载 一、如何描述 JSON ? JSON (JavaScript Object Notation) 缩写,JSO
IMWeb前端团队
2017/12/29
4.9K0
JSON Schema 介绍及应用
聊一聊如何确保接口文档的完整性和准确性
在我们进行接口测试过程中,有可能会遇到接口文档更新不及时或者错误的问题,导致项目的开发过程中出现沟通障碍或者集成问题等。
漫谈测试
2025/05/17
770
聊一聊如何确保接口文档的完整性和准确性
jsonschema校验json数据_接口校验不通过
何为Json-Schema Json-schema是描述你的JSON数据格式;JSON模式(应用程序/模式+ JSON)有多种用途,其中之一就是实例验证。验证过程可以是交互式或非交互式的。例如,应用程序可以使用JSON模式来构建用户界面使互动的内容生成除了用户输入检查或验证各种来源获取的数据。(来自百度百科)
全栈程序员站长
2022/10/04
1.7K0
jsonschema校验json数据_接口校验不通过
如何优雅地校验后端接口数据,不做前端背锅侠
最近新接手了一批项目,还没来得及接新需求,一大堆bug就接踵而至,仔细一看,应该返回数组的字段返回了 null,或者没有返回,甚至返回了字符串 "null"???
科技新语
2023/02/07
1.4K0
【Ajv】JSON Schema Validator
     JSON Schema是一份用来注释和验证JSON文档开源草案,通过JSON Schema可以描述现有的数据格式,可以完成数据的自动化测试,可以有效保障数据提交的质量。
前端小鑫同学
2022/12/26
2.2K0
【Ajv】JSON Schema Validator
JsonSchmea用法
JSON Schema是基于JSON格式,用于定义JSON数据结构以及校验JSON数据内容。JSON Schema官网地址:http://json-schema.org/
趣学程序-shaofeer
2019/12/27
1.4K0
相关推荐
JSON Schema
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验