<img align="right" alt="Ajv logo" width="160" src="http://epoberezkin.github.io/ajv/images/ajv_logo.png">
# Ajv: Another JSON Schema Validator
The fastest JSON Schema validator for node.js and browser. Supports [v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals).
[![Build Status](https://travis-ci.org/epoberezkin/ajv.svg?branch=master)](https://travis-ci.org/epoberezkin/ajv)
[![npm version](https://badge.fury.io/js/ajv.svg)](https://www.npmjs.com/package/ajv)
[![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv)
[![Code Climate](https://codeclimate.com/github/epoberezkin/ajv/badges/gpa.svg)](https://codeclimate.com/github/epoberezkin/ajv)
[![Coverage Status](https://coveralls.io/repos/epoberezkin/ajv/badge.svg?branch=master&service=github)](https://coveralls.io/github/epoberezkin/ajv?branch=master)
[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv)
__Please note__: You can start using NEW beta version [5.0.4](https://github.com/epoberezkin/ajv/releases/tag/5.0.4-beta.3) (see [migration guide from 4.x.x](https://github.com/epoberezkin/ajv/releases/tag/5.0.1-beta.0)) with the support of JSON-Schema draft-06 (not officially published yet): `npm install ajv@^5.0.4-beta`.
Also see [docs](https://github.com/epoberezkin/ajv/tree/5.0.4-beta.3) for 5.0.4.
## Contents
- [Performance](#performance)
- [Features](#features)
- [Getting started](#getting-started)
- [Frequently Asked Questions](https://github.com/epoberezkin/ajv/blob/master/FAQ.md)
- [Using in browser](#using-in-browser)
- [Command line interface](#command-line-interface)
- Validation
- [Keywords](#validation-keywords)
- [Formats](#formats)
- [$data reference](#data-reference)
- NEW: [$merge and $patch keywords](#merge-and-patch-keywords)
- [Defining custom keywords](#defining-custom-keywords)
- [Asynchronous schema compilation](#asynchronous-compilation)
- [Asynchronous validation](#asynchronous-validation)
- Modifying data during validation
- [Filtering data](#filtering-data)
- [Assigning defaults](#assigning-defaults)
- [Coercing data types](#coercing-data-types)
- API
- [Methods](#api)
- [Options](#options)
- [Validation errors](#validation-errors)
- [Related packages](#related-packages)
- [Packages using Ajv](#some-packages-using-ajv)
- [Tests, Contributing, History, License](#tests)
## Performance
Ajv generates code using [doT templates](https://github.com/olado/doT) to turn JSON schemas into super-fast validation functions that are efficient for v8 optimization.
Currently Ajv is the fastest and the most standard compliant validator according to these benchmarks:
- [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place
- [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster
- [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html)
- [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html)
Performace of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark):
[![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=32,4,1&chs=600x416&chxl=-1:%7Cajv%7Cis-my-json-valid%7Cjsen%7Cschemasaurus%7Cthemis%7Cz-schema%7Cjsck%7Cjsonschema%7Cskeemas%7Ctv4%7Cjayschema&chd=t:100,68,61,22.8,17.6,6.6,2.7,0.9,0.7,0.4,0.1)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance)
## Features
- Ajv implements full [JSON Schema draft 4](http://json-schema.org/) standard:
- all validation keywords (see [JSON-Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md))
- full support of remote refs (remote schemas have to be added with `addSchema` or compiled to be available)
- support of circular references between schemas
- correct string lengths for strings with unicode pairs (can be turned off)
- [formats](#formats) defined by JSON Schema draft 4 standard and custom formats (can be turned off)
- [validates schemas against meta-schema](#api-validateschema)
- supports [browsers](#using-in-browser) and nodejs 0.10-6.x
- [asynchronous loading](#asynchronous-compilation) of referenced schemas during compilation
- "All errors" validation mode with [option allErrors](#options)
- [error messages with parameters](#validation-errors) describing error reasons to allow creating custom error messages
- i18n error messages support with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package
- [filtering data](#filtering-data) from additional properties
- [assigning defaults](#assigning-defaults) to missing properties and items
- [coercing data](#coercing-data-types) to the types specified in `type` keywords
- [custom keywords](#defining-custom-keywords)
- keywords `switch`, `constant`, `contains`, `patternGroups`, `patternRequired`, `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` from [JSON-schema v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) with [option v5](#options)
- [v5 meta-schema](https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#) for schemas using v5 keywords
- [v5 $data reference](#data-reference) to use values from the validated data as values for the schema keywords
- [asynchronous validation](#asynchronous-validation) of custom formats and keywords
Currently Ajv is the only validator that passes all the tests from [JSON Schema Test Suite](https://github.com/json-schema/JSON-Schema-Test-Suite) (according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), apart from the test that requires that `1.0` is not an integer that is impossible to satisfy in JavaScript).
## Install
```
npm install ajv
```
To install a stable beta version [5.0.4](https://github.com/epoberezkin/ajv/releases/tag/5.0.4-beta.3) (see [migration guide from 4.x.x](https://github.com/epoberezkin/ajv/releases/tag/5.0.1-beta.0)):
```
npm install ajv@^5.0.4-beta
```
## <a name="usage"></a>Getting started
Try it in the node REPL: https://tonicdev.com/npm/ajv
The fastest validation call:
```javascript
var Ajv = require('ajv');
var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true}
var validate = ajv.compile(schema);
var valid = validate(data);
if (!valid) console.log(validate.errors);
```
or with less code
```javascript
// ...
var valid = ajv.validate(schema, data);
if (!valid) console.log(ajv.errors);
// ...
```
or
```javascript
// ...
ajv.addSchema(schema, 'mySchema');
var valid = ajv.validate('mySchema', data);
if (!valid) console.log(ajv.errorsText());
// ...
```
See [API](#api) and [Options](#options) for more details.
Ajv compiles schemas to functions and caches them in all cases (using schema stringified with [json-stable-stringify](https://github.com/substack/json-stable-stringify) as a key), so that the next time the same schema is used (not necessarily the same object instance) it won't be compiled again.
The best performance is achieved when using compiled functions returned by `compile` or `getSchema` methods (there is no additional function call).
__Please note__: every time validation function or `ajv.validate` are called `errors` property is overwritten. You need to copy `errors` array reference to another variable if you want to use it later (e.g., in the callback). See [Validation errors](#validation-errors)
## Using in browser
You can require Ajv directly from the code you browserify - in this case Ajv will be a part of your bundle.
If you need to use Ajv in several bundles you can create a separate UMD bundle using `npm run bundle` script (thanks to [siddo420](https://github.com/siddo420)).
Then you need to load Ajv in the browser:
```html
<script src="ajv.min.js"></script>
```
This bundle can be used with diffe
weixin_42450354
- 粉丝: 0
- 资源: 1
最新资源
- 使PHP 集成支付宝当面付功能支付成功后跳转到自定义页面
- LQR控制主动悬架模型:对比不同自由度系统响应及LQG主动悬架性能分析,LQR控制主动悬架模型 LQR控制,基于最优控制的思想,以状态反馈控制的形式,根据自定权重,求解出最优的反馈系数K simul
- 标准IEEE9三机九节点Simulink仿真模型:风电并网、储能与SVC自由开发功能探究,标准IEEE9三机九节点simulink仿真模型,可自加风电并网,储能,SVC,自由开发 ,核心关键词:IEE
- "超低温漂带隙基准电路设计:高电源抑制比、低功耗及详细设计文档PDF",超低温漂带隙基准电路设计,高电源抑制比,低功耗 ppm:2.4 psrr:90dB 电流:14.47uA 1.带设计文档PDF
- 永磁同步电机全速度无位置传感器控制:仿真模型与加权双坐标切换方案,永磁同步电机(pmsm,全速度切无位置传感器控制(高速可以是超螺旋滑模) 低速可以是脉振高频方波注入,量产方案,仿真模型 切有加权切
- 基于tc275 aurix等多平台XCP UDS Bootloader与CCP标定程序开发指南及CANape使用教程与A2L文件生成指南,基于tc275 aurix 1g 2g,tc387,tc377
- wordpress付费查看隐藏内容插件的开发演示和记录,视频操作和代码已上传本页下载查看
- 基于MMC模块化多电平换流器的HVDC直流输电系统仿真研究:载波移相调制下的性能优化与功率控制策略探索,MMC模块化多电平流器,MMC-HVDC直流输电系统,单个桥臂N=10个子模块,采用载波移相调制
- 十字型声子晶体结构设计与特性解析案例分享,十字型声子晶体案例 ,十字型声子晶体案例; 声子晶体结构; 案例分析; 声子晶体特性; 实际应用; 十字型设计,"十字型声子晶体结构案例解析"
- "遗传算法优化编码序列实现天线雷达隐身技术的RCS缩减与远场效果观察",遗传算法优化编码序列,实现编码超表面rcs缩减 使用MATLAB或者Python软件,两个代码都有 能够实现最佳的漫反射效果
- 三相PWM逆变器闭环仿真:电压电流双闭环控制下的系统抗扰性与动态响应研究(基于Matlab Simulink 2021b模型),三相PWM逆变器闭环仿真,电压电流双闭环控制 在0.2s时突加负载测试
- 卡尔曼滤波算法在二阶电池等效电路模型中的应用与优化策略,卡尔曼滤波算法 二阶电池等效电路模型 ,核心关键词:卡尔曼滤波算法; 二阶电池等效电路模型;,"卡尔曼滤波算法在二阶电池等效电路模型中的应用"
- 五相永磁同步电机PI双闭环SVPWM矢量控制模型:复杂精细的电机控制,波形良好且动态响应迅速,五相电机simulink,五相永磁同步电机simulink,PI双闭环SVPWM矢量控制,分十个扇区,波形
- 三菱FX系列PLC温度PID控制程序详解:成熟可靠的应用实践与注释借鉴,含IO图及触摸屏编程指导,三菱FX系列PLC温度PID控制程序(含注释和IO图、三菱触摸屏程序),程序已经应用于设备上,成熟可靠
- 欧姆龙NJ控制程序宝典:涵盖相机、机器人等多功能,LAD编程模板易学易用,逻辑思维程序通用西门子、三菱等项目,欧姆龙NJ的控制程序,里面功能齐全,相机,机器人,RFID,转盘,检测传感器,伺服等,里面
- 单相逆变变频器:基于双闭环控制策略与Pi控制实现动态调整输出频率及电压功能,输入电压可调整,输出峰值电压可设置,matlab2021b环境下运行 ,单相逆变变频器,双闭环控制策略,电压环和电流环均采用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈