在本文中,我们将介绍创建和共享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相关推荐

  1. 使用阿里巴巴json映射_使用JSON模式验证来映射稀疏JSON

    使用阿里巴巴json映射 在本文中,我们将探讨在创建和共享API时出现的问题. 特别是,需要: 表达数据的结构 提供对该数据的验证 允许将来改变主意 通过您拥有的部分数据与客户进行沟通 缺少数据时填写 ...

  2. JSON模式在构建和部署API中的作用

    什么是JSON模式 ? 它提供了描述任何JSON值的结构和属性的详尽方法. 在记录对任何JSON API的请求和响应时,它非常有用. 本文将探讨其在API的软件开发周期中的作用. 记录JSON响应格式 ...

  3. java中Jackson_在Java中使用Jackson的JSON模式支持?

    JSON模式是基于JSON格式的规范,用于定义JSON数据的结构.该JsonSchema类可以提供什么需要一个给定的应用程序以及如何与它进行交互JSON数据的合同. JsonSchema可以定义验证, ...

  4. 使用MOXy 2.5.1快速且有点脏的JSON模式生成

    因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式. 我正在使用MOXy从POJO生成JSON,从Eclip ...

  5. moxy json介绍_使用MOXy 2.5.1快速且有点脏的JSON模式生成

    moxy json介绍 因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式. 我正在使用MOXy从POJO生 ...

  6. moxy json介绍_MOXy的@XmlVariableNode – JSON模式示例

    moxy json介绍 我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来 ...

  7. MOXy的@XmlVariableNode – JSON模式示例

    我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来演示新的映射. 您可以使 ...

  8. java存储json到mongo_使用spring在mongodb中存储JSON模式

    我是 Spring数据和mongodb的新手.我有一个表示 JSON模式的 JSON对象,我需要使用spring数据将其存储在mongodb中.但JSON模式的问题是JSON Schema的结构是动态 ...

  9. wadl_WADL中的JSON模式

    wadl 在其他工作之间,我最近一直在审查WADL规范,以解决一些文档问题,以生成更新版本. 因为显而易见的一件事是缺少对XML以外的语言的语法支持-是的,您可以使用JSON <-> XM ...

最新文章

  1. 【kindeditor】KindEditor获取多个textarea文本框的值并判断非空
  2. 5分钟学会打游戏的活体人脑细胞,比 AI 学习速度更快
  3. java word 读取excel数据_在Java中实现读写操作Word、Excel等文件
  4. SQL Cookbook:一、检索记录(1)从表中检索所有行和列
  5. Luogu 1541 乌龟棋
  6. 大四学生对于晚睡的思考
  7. Android系统(117)---Activity启动过程
  8. 虽然今天angular5发布了,但我还是吧这篇angularjs(1)+webpack的文章发出来吧哈哈哈...
  9. 单个文件如何修改MD5
  10. C语言判断上三角矩阵
  11. average函数python_在Python3 numpy中mean和average的区别详解
  12. 使用栈进行括号匹配的判断
  13. 联想win8系统改成win7系统教程,win8系统如何装回win7
  14. Android usb学习笔记:Android AOA协议Android端 流程总结
  15. LeetCode 区间子数组个数
  16. rogabet notepad 1.5
  17. 通达信交易系统接口是不是免费的?
  18. 5G催化智能经济快速崛起
  19. 6.ES中什么是索引(ES中的索引指的是库)的分片和备份(副本)?ES中的关键词有哪些? 嘻哈的简写笔记——Elastic Search
  20. swagger2入门程序启动报错Exception encountered during context initialization - cancelling refresh attempt: o

热门文章

  1. jzoj4743-积木【状压dp】
  2. P4316-绿豆蛙的归宿【数学期望】
  3. P2278-[HNOI2003]操作系统【堆】
  4. 【LCT】历史(P4338)
  5. 【矩阵乘法】Matrix Power Series(poj 3233)
  6. Javafx的WebEngine的url加载不输出结果坑,gc回收了局部变量
  7. 44个Java代码性能优化总结
  8. Java 内存模型 JMM 详解
  9. java之StringBuider与StringBuffer
  10. 都忘了自己还有一套房子了。。。