使用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相关推荐
- 使用阿里巴巴json映射_使用JSON模式验证来映射稀疏JSON
使用阿里巴巴json映射 在本文中,我们将探讨在创建和共享API时出现的问题. 特别是,需要: 表达数据的结构 提供对该数据的验证 允许将来改变主意 通过您拥有的部分数据与客户进行沟通 缺少数据时填写 ...
- JSON模式在构建和部署API中的作用
什么是JSON模式 ? 它提供了描述任何JSON值的结构和属性的详尽方法. 在记录对任何JSON API的请求和响应时,它非常有用. 本文将探讨其在API的软件开发周期中的作用. 记录JSON响应格式 ...
- java中Jackson_在Java中使用Jackson的JSON模式支持?
JSON模式是基于JSON格式的规范,用于定义JSON数据的结构.该JsonSchema类可以提供什么需要一个给定的应用程序以及如何与它进行交互JSON数据的合同. JsonSchema可以定义验证, ...
- 使用MOXy 2.5.1快速且有点脏的JSON模式生成
因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式. 我正在使用MOXy从POJO生成JSON,从Eclip ...
- moxy json介绍_使用MOXy 2.5.1快速且有点脏的JSON模式生成
moxy json介绍 因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式. 我正在使用MOXy从POJO生 ...
- moxy json介绍_MOXy的@XmlVariableNode – JSON模式示例
moxy json介绍 我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来 ...
- MOXy的@XmlVariableNode – JSON模式示例
我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来演示新的映射. 您可以使 ...
- java存储json到mongo_使用spring在mongodb中存储JSON模式
我是 Spring数据和mongodb的新手.我有一个表示 JSON模式的 JSON对象,我需要使用spring数据将其存储在mongodb中.但JSON模式的问题是JSON Schema的结构是动态 ...
- wadl_WADL中的JSON模式
wadl 在其他工作之间,我最近一直在审查WADL规范,以解决一些文档问题,以生成更新版本. 因为显而易见的一件事是缺少对XML以外的语言的语法支持-是的,您可以使用JSON <-> XM ...
最新文章
- 【kindeditor】KindEditor获取多个textarea文本框的值并判断非空
- 5分钟学会打游戏的活体人脑细胞,比 AI 学习速度更快
- java word 读取excel数据_在Java中实现读写操作Word、Excel等文件
- SQL Cookbook:一、检索记录(1)从表中检索所有行和列
- Luogu 1541 乌龟棋
- 大四学生对于晚睡的思考
- Android系统(117)---Activity启动过程
- 虽然今天angular5发布了,但我还是吧这篇angularjs(1)+webpack的文章发出来吧哈哈哈...
- 单个文件如何修改MD5
- C语言判断上三角矩阵
- average函数python_在Python3 numpy中mean和average的区别详解
- 使用栈进行括号匹配的判断
- 联想win8系统改成win7系统教程,win8系统如何装回win7
- Android usb学习笔记:Android AOA协议Android端 流程总结
- LeetCode 区间子数组个数
- rogabet notepad 1.5
- 通达信交易系统接口是不是免费的?
- 5G催化智能经济快速崛起
- 6.ES中什么是索引(ES中的索引指的是库)的分片和备份(副本)?ES中的关键词有哪些? 嘻哈的简写笔记——Elastic Search
- swagger2入门程序启动报错Exception encountered during context initialization - cancelling refresh attempt: o