JSON Schema
json schema
json schema 是一种基于 json 格式定义 json 数据结构的规范。它被写在 ietf 草案下并于 2011 年到期。json 模式:
- 描述现有数据格式。
- 干净的人类和机器可读的文档。
- 完整的结构验证,有利于自动化测试。
- 完整的结构验证,可用于验证客户端提交的数据。
1. json 模式验证库
目前有好几个验证器可用于不同的编程语言。但是目前最完整和兼容 json 模式的验证器是 jsv。
语言 | 程序库 |
---|---|
c | wjelement (lgplv3) |
java | json-schema-validator (lgplv3) |
.net | json.net (mit) |
actionscript 3 | frigga (mit) |
haskell | aeson-schema (mit) |
python | jsonschema |
ruby | autoparse (asl 2.0); ruby-jsonschema (mit) |
php | php-json-schema (mit). json-schema (berkeley) |
javascript | orderly (bsd); jsv; json-schema; matic (mit); dojo; persevere (modified bsd or afl 2.0); schema.js. |
2. json 模式示例
下面是一个基本的 json 模式,其中涵盖了一个经典的产品目录说明:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "product", "description": "a product from acme's catalog", "type": "object", "properties": { "id": { "description": "the unique identifier for a product", "type": "integer" }, "name": { "description": "name of the product", "type": "string" }, "price": { "type": "number", "minimum": 0, "exclusiveminimum": true } }, "required": ["id", "name", "price"] }
我们来看一下可以用于这一模式中的各种重要关键字:
关键字 | 描述 |
---|---|
$schema | $schema 关键字状态,表示这个模式与 v4 规范草案书写一致。 |
title | 用它给我们的模式提供了标题。 |
description | 关于模式的描述。 |
type | type 关键字在我们的 json 数据上定义了第一个约束:必须是一个 json 对象。 |
properties | 定义各种键和他们的值类型,以及用于 json 文件中的最小值和最大值。 |
required | 存放必要属性列表。 |
minimum | 给值设置的约束条件,表示可以接受的最小值。 |
exclusiveminimum | 如果存在 "exclusiveminimum" 并且具有布尔值 true,如果它严格意义上大于 "minimum" 的值则实例有效。 |
maximum | 给值设置的约束条件,表示可以接受的最大值。 |
exclusivemaximum | 如果存在 "exclusiveminimum" 并且具有布尔值 true,如果它严格意义上小于 "maximum" 的值则实例有效。 |
multipleof | 如果通过这个关键字的值分割实例的结果是一个数字则表示紧靠 "multipleof" 的数字实例是有效的。 |
maxlength | 字符串实例字符的最大长度数值。 |
minlength | 字符串实例字符的最小长度数值。 |
pattern | 如果正则表达式匹配实例成功则字符串实例被认为是有效的。 |
可以在 http://json-schema.org 上检出可用于定义 json 模式的完整关键字列表。上面的模式可用于测试下面给出的 json 代码的有效性:
[ { "id": 2, "name": "an ice sculpture", "price": 12.50, }, { "id": 3, "name": "a blue mouse", "price": 25.50, } ]