位置:首頁 > Java技術 > Json教學 > JSON 框架模式(Schema)

JSON 框架模式(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 The $schema 關鍵字狀態,這種模式被寫入草案V4規範。
title 將使用此架構提供一個標題
description 架構的一點描述
type 我們 JSON 數據類型關鍵字定義的第一個約束條件:它必須是一個JSON對象
properties 定義各個鍵和它們的值類型,最小和最大值中要使用JSON文件
required 這樣可以使所需的屬性的列表
minimum 這是約束的值,並代表可接受的最小值
exclusiveMinimum 如果“exclusiveMinimum”的存在,並且具有布爾值true的實例是有效的,如果它是嚴格的最低限度的值
maximum 這是約束的值被提上表示可接受的最大值
exclusiveMaximum 如果“exclusiveMaximum”的存在,並且具有布爾值true的實例是有效的,如果它是嚴格的值小於“最大”。
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,
    }
]