javascript
使用JSON模式验证来映射稀疏JSON
在本文中,我們將介紹創建和共享API時出現的問題。 特別是,需要:
- 表達數據的結構
- 提供對該數據的驗證
- 允許將來改變主意
- 通過您擁有的部分數據與客戶進行溝通
- 缺少數據時填寫空白
人們通常使用版本編號的API解決此問題。 API的每個版本都綁定到一個架構。 模式通常以JSON模式格式表示。
上述支持庫不支持在同一模式的多個版本之間進行轉換。
Apache Avro可以很好地支持模式演化。 Avro可以使用類似于JSON Schema的方式定義其架構,并且能夠讀取和寫入JSON,但是如果您通過JSON中的聯合類型使用可空字段,則需要JSON2AvroConverter來讀取外觀正常的JSON。
但是,Avro并不擅長讀取缺少字段的JSON。
JSON Schema的草案7支持默認值, everit json-schema庫可以在驗證時將默認值替換為對象。
放在一起
比方說:
- 我有一個模式,可以為任何非強制性內容提供默認值
- 我有一個規則,那就是架構的未來版本都不能添加強制性的內容
- 我有具有給定字段的數據,無論特定版本的架構是否需要它們
- 我希望返回對特定模式版本有效的數據
我將需要:
- 篩選出源中而不是架構中的字段
- 當字段在模式中但不在數據中時,添加默認值
以上所有內容均在GitHub的此POC中進行了探討 。
POC
POC使用everit庫填充默認值,并演示如何在模式中表達默認值。
在Java代碼中表達JSON有點煩人,所以最好的辦法是提取模式的測試并在JSONEditorOnline之類的工具中進行探索 。 (希望您的IDE在復制和粘貼時會取消轉義"字符-IntelliJ會。)
POC具有基本的實現,可以在模式和輸入JSON上進行迭代,從而刪除模式中不知道的JSON字段。 這是很基本的原因,因為它無法處理JSON模式中可能出現的邊緣情況,并且不能容忍輸入JSON中的數據類型與模式描述的數據類型不同。
也就是說,它已經通過了一些有用的測試,因此絕對是將來進行調查的起點。
結論
模式演化可以非常精確地完成。 Apache Avro允許對同一模式的多個版本進行建模,加載一個版本并轉換為另一個版本,但這不是JSON的好朋友,并且要求源JSON必須采用正確的格式以用于其中一個模式。
JSON模式是REST API定義的基本構建塊。 如果在正確的庫中使用它,可以在驗證期間使用它提供默認值的能力之上,將其強制用作過濾器。
我希望這里的POC代碼對某人有用。
翻譯自: https://www.javacodegeeks.com/2020/02/using-json-schema-validation-to-map-sparse-json.html
總結
以上是生活随笔為你收集整理的使用JSON模式验证来映射稀疏JSON的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去备案改色膜被发现改了排气(去备案改色)
- 下一篇: 原生安卓锁屏下载(原生安卓锁屏)