jsonschema校验json数据_xml schema校验

jsonschema校验json数据_xml schema校验ajv使用在使用前,需要知道json-schema是什么。json-schemajson-schema是一个用来描述json数据格式。ajvajv是一个校验json-schem

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

ajv 使用

在使用前,需要知道 json-schema 是什么。

json-schema

json-schema 是一个用来描述json 数据格式。

ajv

ajv 是一个校验 json-schema 的数据格式工具(也有其他的,这里具体讲解 ajv)。

ajv 引入

import Ajv from "ajv";
const options = {}; // 具体的配置
const ajv = new Ajv(options); // 某些情况下,需要改为 new Ajv.default()

// 开启校验
const isValid = ajv.validate(schemas, data); // schemas 具体配置,data数据
if (!iaValid) {
  throw new Error(ajv.errorsText());
}

json-schema 默认含有下面 6 种数据结构string ,number, object ,array ,boolean ,null

通过 ajv-keywords 可以进行扩展更多类型。

同时支持自定义类型

class MyClass {}

const instanceofDef = require("ajv-keywords/dist/definitions/instanceof");
instanceofDef.CONSTRUCTORS.MyClass = MyClass;
ajv.validate({ instanceof: "MyClass" }, new MyClass()); // true

文档太枯燥,这些基本知识又不想炒闲饭式地再叙述一遍,举几个示例吧,简洁明了,走起。

基本类型

// 规定校验类型
const schema = {
  type: "object",
  properties: {
    // 属性
    get: {
      type: "object", // 类型
      properties: {
        url: {
          type: "string",
        },
        method: {
          type: "string",
        },
      },
      required: ["url"], // 必须包含 url 属性
    },
  },
};

// 具体数据
const data = {
  get: {
    url: "http://localhost:8080/get",
  },
};

重复代码块如何处理

// 规定校验类型
 const schema = {
   type: 'object',
   properties: { // 属性
   get: {
+	 $id: '#getType',
	 type: 'object', // 类型
     properties: {
	   url: {
		  type: 'string'
	   },
	   method: {
		 type: 'string'
	   },
	 },
 	 required: ['url'] // 必须包含 url 属性
   },
   put: {
-	 type: 'object', // 类型
-	 properties: {
-		url: {
-		  type: 'string'
-		},
-		method: {
-		  type: 'string'
-		},
-	  },
-     required: ['url'] // 必须包含 url 属性
+     $ref: '#getType' // 关联上面get,与之属性保持一致
    },
    delete: {
	  $ref: '#getType'
    }
  }
}

不支持的格式如何处理

由于 json-schemas 不支持 js 里复杂数据类型的具体类型,比如 function, date …,因而需要引入 ajv-keywords 进行额外补充,但是类型只支持上面列出的类型。

import Ajv from "ajv";
import AjvKeywords from "ajv-keywords";

const ajv = new Ajv();
AjvKeywords(ajv, ["typeof", "instanceof"]); // 除了 type 定义类型外,还可以通过 typeof,instanceof

// 规定校验类型
const schema = {
  type: "object",
  properties: {
    // 属性
    get: {
      type: "object", // 类型
      properties: {
        url: {
          type: "string",
        },
        method: {
          type: "string",
        },
      },
      required: ["url"], // 必须包含 url 属性
    },
    getMethod: {
      instanceof: "Function", // typeof 类似,只是支持的类型不同
    },
    list: {
      instanceof: ["Function", "Array"],
    },
  },
};

const data = {
  get: {
    url: "http://localhost:8080/get",
  },
  getMethod() {},
  list: [],
};

通过上面的方式,便可以对日常使用 json 格式的数据进行校验,保证在处理数据前,拿到的数据是有效的,可以避免很多繁琐的数据格式校验,而且也有了一个统一的规则。

参考链接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167483.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 火狐浏览器单击链接总是在一个新的标签页打开的设置方法

    火狐浏览器单击链接总是在一个新的标签页打开的设置方法

    2021年10月17日
  • Java入门代码_java编程自学网

    Java入门代码_java编程自学网首先在配置好java环境的前提下,安装好eclipse,以下示例均在eclipse下运行,代码详解看注释一、HelloWorld示例代码:packagecom.hpe.java;//这是一个问好程序publicclassHello{//一个类只能有一个main方法publicstaticvoidmain(Stringarg[]){System.out.print(“hellowo…

    2022年10月17日
  • 电阻电容电感的常用标注方法(手机电容和电阻的区分)

    认识电容及电容电阻的标注   一、认识电容及电容的标注①电容的功能和表示方法。由两个金属极,中间夹有绝缘介质构成。电容的特性主要是隔直流通交流,因此多用于级间耦合、滤波、去耦、旁路及信号调谐。电容在电路中用“C”加数字表示,比如C8,表示在电路中编号为8的电容。②电容的分类。电容按介质不同分为:气体介质电容,液体介质电容,无机固体介质电容,有机固体介质电容电解电容。按极性分为:有极性电容和无极性电

  • 操作系统中并发和并行的区别在于_线程是并行还是并发

    操作系统中并发和并行的区别在于_线程是并行还是并发一、教材解释:·并行是指两个或者多个事件在同一时刻发生,而并发是指两个或者多个事件在同一时间间隔发生·并行是在不同实体上的多个事件,并发是在同一实体上的多个事件二、c语言站长公众号解释:1、并发早期计算机的CPU都是单核的,一个CPU在同一时间只能执行一个进程或线程,当系统中有多个进程或线程等待执行时,CPU只能执行完一个再执行下一个。计算机在运行过程中,有很多指令会设计i/o操作,而i/o操作又是相当耗时间的,速度远远低于CPU,这导致CPU经常处于空闲状态,只能等待i/o操作完成

  • MES项目导入-SMT行业解决方案知识

    SMT行业解决方案 随着电子技术的快速发展和电子产品生命周期的不断变短,给PCB板组装制造商提出了越来越高的要求,同时,全球化的市场竞争使企业面临的国际压力越来越大。现代PCB板组装制造企业要想在瞬息万变的市场竞争中站稳脚跟,得以生存发展,必须采用先进的生产模式,快速响应客户订单需求,并提供优质低价的产品。系统集成和信息集成(CIMS)是当前提高企业管理效率的重要技术。

  • 贪心 Codeforces Round #263 (Div. 2) C. Appleman and Toastman

    贪心 Codeforces Round #263 (Div. 2) C. Appleman and Toastman

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号