- JSON有用资源
- JSON - 快速指南
- JSON - 有用资源
- JSON - 讨论
JSON模式
JSON Schema是一种基于JSON的规范,用于定义JSON数据的结构。它是在IETF草案下编写的,该草案于2011年失效。JSON Schema:
- 描述您现有的数据格式。
- 清晰、易于理解的文档(人机可读)。
- 完整的结构验证,可用于自动化测试。
- 完整的结构验证,用于验证客户端提交的数据。
JSON Schema验证库
目前有几种针对不同编程语言的验证器可用。目前,最完整和最兼容的JSON Schema验证器是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 Schema示例
下面是一个基本的JSON模式,它涵盖了经典的产品目录描述:
{
"$schema": "https://json-schema.fullstack.org.cn/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"]
}
让我们检查一下该模式中可以使用的一些重要关键字:
| 序号 | 关键字和描述 |
|---|---|
| 1 |
$schema $schema关键字指出此模式是根据草案v4规范编写的。 |
| 2 |
title 您将使用此关键字为您的模式命名。 |
| 3 |
description 模式的简短描述。 |
| 4 |
type type关键字定义了对JSON数据的第一个约束:它必须是一个JSON对象。 |
| 5 |
properties 定义各种键及其值类型、JSON文件中使用的最小值和最大值。 |
| 6 |
required 此关键字列出必需的属性。 |
| 7 |
minimum 这是对值施加的约束,表示可接受的最小值。 |
| 8 |
exclusiveMinimum 如果存在“exclusiveMinimum”并且其布尔值为true,则当实例严格大于“minimum”的值时,该实例有效。 |
| 9 |
maximum 这是对值施加的约束,表示可接受的最大值。 |
| 10 |
exclusiveMaximum 如果存在“exclusiveMaximum”并且其布尔值为true,则当实例严格小于“maximum”的值时,该实例有效。 |
| 11 |
multipleOf 如果将实例除以此关键字的值的结果为整数,则数值实例对于“multipleOf”有效。 |
| 12 |
maxLength 字符串实例的长度定义为其字符的最大数量。 |
| 13 |
minLength 字符串实例的长度定义为其字符的最小数量。 |
| 14 |
pattern 如果正则表达式成功匹配实例,则字符串实例被认为有效。 |
您可以查看https://json-schema.fullstack.org.cn以获取定义JSON模式时可使用的关键字的完整列表。上述模式可用于测试以下JSON代码的有效性:
[
{
"id": 2,
"name": "An ice sculpture",
"price": 12.50,
},
{
"id": 3,
"name": "A blue mouse",
"price": 25.50,
}
]