JSON - 架构



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

如果存在 “exclusiveMaximum” 且布尔值为 true,则当它严格低于 “maximum” 的值时,该实例有效。

multipleOf

如果实例除以此关键字的值的结果是整数,则数字实例对 “multipleOf” 有效。

maxLength

字符串实例的长度定义为其最大字符数。

minLength

字符串实例的长度定义为其最小字符数。

pattern

如果正则表达式成功匹配 string 实例,则认为该实例有效。

您可以检查 http://json-schema.org 以获取可用于定义 JSON 架构的关键字的完整列表。上述架构可用于测试以下 JSON 代码的有效性 -


[
   {
      "id": 2,
      "name": "An ice sculpture",
      "price": 12.50,
   },
    
   {
      "id": 3,
      "name": "A blue mouse",
      "price": 25.50,
   }
]