JSON 模式

2023-04-17 10:56 更新

JSON 模式(Schema)是一種基于 JSON 格式定義 JSON 數(shù)據(jù)結(jié)構(gòu)的規(guī)范。它被寫在 IETF 草案下并于 2011 年到期。它用來:

  • 描述現(xiàn)有數(shù)據(jù)格式。
  • 干凈的人類和機器可讀的文檔。
  • 完整的結(jié)構(gòu)驗證,有利于自動化測試。
  • 完整的結(jié)構(gòu)驗證,可用于驗證客戶端提交的數(shù)據(jù)。

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 模式,其中涵蓋了一個經(jīng)典的產(chǎn)品目錄說明:

{
    "$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"]
}

我們來看一下可以用于這一模式中的各種重要關(guān)鍵字:

關(guān)鍵字 描述
$schema $schema 關(guān)鍵字狀態(tài),表示這個模式與 v4 規(guī)范草案書寫一致。
title 用它給我們的模式提供了標(biāo)題。
description 關(guān)于模式的描述。
type type 關(guān)鍵字在我們的 JSON 數(shù)據(jù)上定義了第一個約束:必須是一個 JSON 對象。
properties 定義各種鍵和他們的值類型,以及用于 JSON 文件中的最小值和最大值。
required 存放必要屬性列表。
minimum 給值設(shè)置的約束條件,表示可以接受的最小值。
exclusiveMinimum 如果存在 "exclusiveMinimum" 并且具有布爾值 true,如果它嚴(yán)格意義上大于 "minimum" 的值則實例有效。
maximum 給值設(shè)置的約束條件,表示可以接受的最大值。
exclusiveMaximum 如果存在 "exclusiveMinimum" 并且具有布爾值 true,如果它嚴(yán)格意義上小于 "maximum" 的值則實例有效。
multipleOf 如果通過這個關(guān)鍵字的值分割實例的結(jié)果是一個數(shù)字則表示緊靠 "multipleOf" 的數(shù)字實例是有效的。
maxLength 字符串實例字符的最大長度數(shù)值。
minLength 字符串實例字符的最小長度數(shù)值。
pattern 如果正則表達(dá)式匹配實例成功則字符串實例被認(rèn)為是有效的。

可以在 http://json-schema.org 上檢出可用于定義 JSON 模式的完整關(guān)鍵字列表。上面的模式可用于測試下面給出的 JSON 代碼的有效性:

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號