使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用计算机的女士,3款女性专用PC 将美丽进行到底

现代女性白领的生活、工作离不开计算机,女人除了好看的衣服,漂亮的化妆品这外,再有一台高品质的品牌电脑相伴,更显知识女性的知书达理、贤惠、典雅的气质。郁金香般的可爱MM,TCL SHE将美丽进行到底 绝色、倾城、绝配、…

aop 获取注解注释的方法_带有AOP和注释的Java方法记录

aop 获取注解注释的方法有时,我想记录(通过slf4j和log4j )方法的每次执行,查看其接收的参数,返回的内容以及每次执行花费的时间。 这是我在AspectJ , jcabi-aspects和Java 6注释的帮助下所做的事情&#xf…

python 合并word文件,在Python上的WordCloud中,我想合并两种语言

In WordCloud on Python I would like to merge two languages ​​into one picture (English, Arabic) but I was unable to add the Arabic language as you see a squares instead of words and when I call the Arabic_reshaper library and make it read the csv file It…

central maven_一键发布到Maven Central的方法

central maven当我向Maven Central发布Java开源库jcabi-aspects的新版本时,我花了30秒钟的时间。 甚至更少。 最近,我发布了版本0.17.2。 您可以在Github第80期中看到所有情况: 如您所见,我向Rultor发出了命令,它向Ma…

防热服的设计数学建模_全国大学生数学建模和电子设计赛,这所驻青高校获奖山东最多...

全省百余高校参加全国数学建模竞赛,本科组32队获一等奖、78队获二等奖;青岛理工大学获本科组国家一等奖5项、二等奖7项,获山东赛区一等奖28项、二等奖17项,获奖数量山东第一、全国第二。1月4日,2019年全国大学生数学建…

每台计算机需要配置网关吗,每台计算机的IP地址和网关以及子网掩码的设置有哪些规律或者规则吗?...

满意答案hryy4082013.04.14采纳率:47% 等级:9已帮助:714人电脑之间要实现网络通信,就必须要有一个合法的ip地址。IP地址网络地址主机地址,(又称:主机号和网络号组成)ip地址的结构使我们可以在Internet上…

mysql提高吞吐量_垃圾收集:提高吞吐量

mysql提高吞吐量这篇文章的灵感来自于在内存管理术语表中碰到“ Pig in the Python ”的定义之后。 显然,该术语用于解释GC反复促进大对象世代相传的情况。 据推测,这样做的效果类似于Python吞下整个猎物,只是在消化过程中被固定住了。 在接…

honeyselect捏脸教程_动漫女生的脸怎么画?卡通漫画少女教学

动漫女生的脸怎么画?卡通漫画少女教学!我们知道,人类的审美是具有时代特征的。在不同的历史时期,人们的审美会发生变化。举个栗子:“楚王好细腰,宫中多饿死”“燕瘦环肥”、魏晋时期的男风盛行、初唐的“肤…

手机怎么进ph_明日发布,华为鸿蒙OS2.0手机版特色功能曝光

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以免费收到最新内容了。每天都有分享,完全是免费订阅,请放心关注。声明:本文转载自网络,如有侵权,请在后台留言联系…

清华大学 张春良 计算机系,南京张春良老师小学生信息学辅导

南师大张老师信息编程师资团队小学信息学的教学如今小学生对计算机的兴趣越来越强,使用计算机的时间也越来越多。许多聪慧的孩子无意之间,为追求控制感、成功感,沉溺进了电脑游戏,令家长、教师扼腕叹息。信息学培训,引…

json 在后天怎么接_长相显老怎么办?以同岁的马伊琍和刘敏涛为例,解析显年轻的技巧...

短发女王马伊琍和最近上热搜的刘敏涛都是1976年出生,今年44岁,但是当两人同框时,即使相同的脸型和服饰,马伊琍显得很年轻,而刘敏涛却像是隔代人,真的好尴尬。这是什么原因呢?其实她们的尴尬&…

java8 streams_当Java 8 Streams API不够用时

java8 streamsJava 8与往常一样是妥协和向后兼容的版本。 JSR-335专家组可能尚未与某些读者就某些功能的范围或可行性达成一致的版本 。 请参阅Brian Goetz关于为什么…的一些具体解释。 …Java 8默认方法中不允许“最终” …Java 8默认方法中不允许“同步” 但是今天&#…

计算机软考初级工程资料,计算机软考网络工程师复习资料及习题(一)

1、 若是serial0 is up, line protocol is up表示该端口工作正常。2、若是serial 0 is down, line protocol is down表示路由器到本地的modem之间无载波信号cd。连接串口和 modem,开启modem.看modem的发送灯td是否亮,td灯亮表示路由器有信号发送给modem.td灯若不亮,…

计算机硬盘瓶颈,为何你的电脑卡的飞起,看看是不是遇到存储瓶颈

原标题:为何你的电脑卡的飞起,看看是不是遇到存储瓶颈存储一直是笔记本电脑的性能瓶颈之一,同时还关系到电池续航时间。除了一颗性能澎湃的处理器之外,更多人困惑的是硬盘存储配置的选择。硬盘不仅有容量属性,更是影响…

JMetro版本8.6.11和11.6.11已发布

你好 JMetro的另一个版本。 这次已重新设置了2个新控件的样式,错误修复和其他一些小的调整。 我希望你们在这个陌生的时代都能安然无well。 继续阅读以获取详细信息。 新的ColorPicker样式 以下是新的ColorPicker样式LIGHT和DARK的动画: ColorPicker…

c#中overlord实例_具有Overlord的WildFly 8.1中的API管理

c#中overlord实例昨天,我简要介绍了霸王项目家族。 今天是时候进行试驾了。 API管理子项目两天前发布了1.0.0.Alpha1,并根据18个月的路线图介绍了第一组功能。 APIMan到底是什么? 它是一个API管理系统,可以嵌入到现有框架或应用程…

计算机病毒需要附着在,计算机病毒是如何传播的?

满意答案Fixedburn2019.10.24采纳率:53% 等级:8已帮助:7262人1、各种网络传播(1)电子邮件电子邮件是病毒通过互联网进行传播的主要媒介。病毒主要依附在邮件的附件中,而电子邮件本身并不产生病毒。当用户下载附件时&#xff0c…

使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段

将任何实体上的版本属性保存到 AWS DynamoDB数据库,它仅是表示实体已修改次数的数字表示。 首次创建实体时,可以将其设置为1,然后在每次更新时递增。 好处是立竿见影的-指示实体已被修改的次数,可用于审核实体。 此外&#xff0…

win7计算机个性化设置,笔记本电脑windows7系统如何用好电脑个性化设置

笔记本电脑windows7系统想要用好电脑个性化设置,该怎么办呢,下面是学习啦小编收集整理的笔记本电脑windows7系统如何用好电脑个性化设置,希望对大家有帮助~~笔记本电脑windows7系统用好电脑个性化设置的方法右击桌面空白区域,在弹…

发动机冷启动和热启动的区别_「牛车实验室」AGM自动启停蓄电池解读 和普通蓄电池到底有什么区别...

[资讯-牛车网]为了节省燃油,越来越多的新车搭载了自动启停功能。搭载了这项功能的汽车,都会随之搭配一块独立的自动启停蓄电池,这块电池只单独为自动启停系统工作。那么同是蓄电池,自动启停电池和普通蓄电池有什么区别&#xff0c…