模式(Schema)
JSON 模式是一种基于 JSON 格式定义 JSON 数据结构的规范。它被写在 IETF 草案下并于 2011 年到期。JSON 模式:
- 描述现有数据格式。
- 干净的人类和机器可读的文档。
- 完整的结构验证,有利于自动化测试。
- 完整的结构验证,可用于验证客户端提交的数据。
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. |
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,
}
]