开发学院

您的位置:首页>教程>正文

教程正文

JSON Schema

  JSON Schema是一种基于JSON的格式规范,用于定义JSON数据的结构。它是根据IETF草案编写的,该草案于2011年到期。JSON Schema 

  •   描述您现有的数据格式。

  •   清晰且人机可读的文档。

  •   完整的结构验证,对自动化测试非常有用。

  •   完成结构验证,验证客户提交的数据。

JSON Schema验证库

  目前针对不同的编程语言有几种验证器可用。目前最完整、最符合JSON模式验证器是JSV。

语言
CWJElement (LGPLv3)
Javajson-schema-validator (LGPLv3)
.NETJson.NET (MIT)
ActionScript 3Frigga (MIT)
Haskellaeson-schema (MIT)
PythonJsonschema
Rubyautoparse (ASL 2.0); ruby-jsonschema (MIT)
PHPphp-json-schema (MIT). json-schema (Berkeley)
JavaScriptOrderly (BSD); JSV; json-schema; Matic (MIT); Dojo; Persevere (modified BSD or AFL 2.0); schema.js.


JSON Schema实例

  下面给出了一个基本的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,则该实例在严格大于“最小值”时有效。

  •   maximum:这是对该值施加的约束,表示最大可接受值。

  •   exclusiveMaximum:如果存在“exclusiveMaximum”,并且布尔值为true,则该实例在严格低于“最大值”时有效。

  •   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,
   }
]