天天看點

JSON Schema了解一下?

如果說typescript是JS with types,那json schema就是json with types

JSON Schema了解一下?
↑↑ 不是很了解這個logo(⊙﹏⊙)

為啥會出現json schema?

json schema也是理科生搞出來的一種标準,因為我們程式員沒工夫搞這些标準,就都甩給計算機科學家來設計了,如果不好用的話不就可以甩鍋了?作為工科生的我們,直接拿來即用,不用考慮資訊熵,資料壓縮,聚合度,功能性等要素。程式猿很開心。

json schema為靜态的json資料結構提供了類型限制以及動态的邏輯運算功能,其實它隻是将大家常用的限制操作用統一的數學語言描述了一遍。。。

雖然JSON schmea沒有多高深,但是隻要你仔細的按着它的教程學一遍,絕對能讓你對軟體行業有一些新的認識。

JSON的理論基礎:位元組與字元

位元組與字元不用說了吧,從資料的角度,一切都是位元組與字元,字元是位元組的抽象應用,其中位元組的意義是數字,在此之上人們創造了清單(以數作為鍵)以及字典(字元作為鍵)。

是以JSON最偉大的地方在于,它既滿足了人類可讀也滿足了機器可讀的需求。json schema本身也是一個json,它所描述的json就是自己的一個instance。

JSON Schema的應用

應用程式通常需要驗證JSON對象,以确儲存在所需的屬性,并且滿足其他限制(例如價格從不低于1美元)。驗證通常在JSON Schema的上下文中執行。

JSON Schema是一種語義語言,用于定義JSON對象的結構,内容和(在某種程度上)語義。它允許您指定有關對象屬性的含義以及對這些屬性有效的值的中繼資料(有關資料的資料)。應用文法語言的結果是描述根據模式有效的JSON對象集的模式(藍圖)。

這個schema提供完整的結構驗證,這對自動化測試和驗證用戶端送出的資料非常有用。

schema還為json寫注釋,因為json本身無法注釋。

由于是一種語義語言,json schema允許擴充,自定義關鍵詞,就像xml一樣。

由于json schema比執行個體json複雜很多,解析并計算schema也需要專門的包,比如:

  • .NET
    • Json.NET Schema draft-07, -06, -04, -03 (AGPL-3.0-only)
    • Manatee.Json draft-07, -06, -04 (MIT)
  • C
    • WJElement draft-04, -03 Draft-06+ progress: issue 17 (LGPL-3.0)
  • C++
    • f5-json-schema draft-07 (Boost Software License 1.0)
  • Clojure
    • json-schema draft-07 (Eclipse Public License 2.0)
  • Elixir
    • Elixir JSON Schema validator draft-04 Draft-06+ progress: issue 24; branch multi-draft-support(MIT)
    • JsonXema draft-07, -06, -04 (MIT)
  • Go
    • gojsonschema draft-07, -06, -04 (Apache 2.0)
    • santhosh-tekuri/jsonschema draft-07, -06, -04 (BSD-3-Clause)
    • qri-io/jsonschema draft-07 includes custom validator support, rich error returns (MIT)
  • Java
    • everit-org/json-schema draft-07, -06, -04 (Apache License 2.0)
    • Justify draft-07 (Apache License 2.0)
  • Kotlin
    • Medeia-validator draft-07, -06, -04 streaming validator for Kotlin and Java clients; works with Jackson and Gson (Apache License 2.0)
  • JavaScript
    • ajv draft-07, -06, -04 for Node.js and browsers - supports custom keywords and $data reference(MIT)
    • djv draft-06, -04 for Node.js and browsers (MIT)
    • vue-vuelidate-jsonschema draft-06 (MIT)
  • PHP
    • Opis Json Schema draft-07, -06 (Apache License 2.0)
    • Swaggest Json Schema draft-07, -06, -04 (MIT)
  • Python
    • jsonschema draft-07, -06, -04, -03 (MIT)
  • Ruby
    • JSONSchemer draft-07, -06, -04 (MIT)
  • Objective-C
    • DSJSONSchemaValidation draft-07, -06, -04 (MIT)
  • Web (Online)
    • JSON Schema Validator draft-07, -06, -04, -03
    • JSON Schema Lint draft-06, -04, -03, -02, -01
  • Command Line
    • ajv-cli draft-07, -06, -04 (MIT)
    • Polyglottal JSON Schema Validator draft-06, -04 can be used with YAML and many other formats besides JSON (MIT)

項目狀态

自2018年12月16日起更新

我們希望在2019年初釋出新一輪草案(核心,驗證,超模式,相對JSON指針),并積極緻力于最後幾個PR。雖然草案目前已經過期,但它們仍處于積極發展階段。該項目由志願者組成,生活偶爾會忽視IETF到期時間表。

該草案花費的時間超出預期,因為它解決了長期以來對JSON Schema構成挑戰的長期問題。這包括建構正式的可擴充性機制,以便我們可以更輕松地繪制一條線來完成Core和Validation規範的内容。

可以在GitHub上跟蹤下一組Internet草案的進度。該草案-08的裡程碑将跟蹤草案的演變範圍(雖然看問題#612為“草案-08”是這個具有裡程碑意義的正确名稱的讨論)。

标準化之路

JSON Schema項目打算将所有四個系列草案都歸為RFC狀态。目前,我們正在繼續改進我們自行釋出的網際網路草案。下一步将是獲得IETF工作組通過的草案。我們正在積極研究如何實作這一目标。

與此同時,可以通過IETF跟蹤Internet草案文檔的釋出:

  • JSON Schema(核心)
  • JSON模式驗證
  • JSON Hyper-Schema
  • 相對JSON指針