使用阿里巴巴json映射_使用JSON模式验证来映射稀疏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映射

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

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

相关文章

本地方法(JNI)——从java 程序中调用C函数

【0】README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法——从java 程序中调用C函数 的基础知识 ; 2) for source code, please visit https://github.com/pacosonTang/core-java-volume/tree/master/co…

Hadoop入门(一)概念与单机安装

一、hadoop的概念 (1)什么是大数据 大数据是不能用传统的计算技术处理的大型数据集的集合。它不是一个单一的技术或工具,而是涉及的业务和技术的许多领域。 (2)hadoop的定义 Hadoop是一个由Apache基金会所开发的分布式…

螺旋测微器 flash_使用测微计收集应用程序指标

螺旋测微器 flash什么是Micrometer? Micrometer是一个简单的外观,用于以供应商中立的方式收集Java应用程序中的指标。 您可以考虑使用SLF4J作为指标。 Micrometer内置了对许多不同指标后端的内置支持,包括Atlas,Datadog&#xff0…

java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)

转自: http://watershitter.iteye.com/blog/477615今天花了至少3个小时跑这个java调c的动态链接库的Hello,native world的程序。 把所有犯的错误和要点总结一下! 1 java 中 c语言函数的声明 public native static void greeting(); //就像是接口声明一样…

Hadoop入门(二)集群安装

一、集群安装条件前置 在虚拟机上先准备一个机子 按用前面【安装单机hadoop】 已完成安装jdk,hadoop和ssh、网络等配置环境等。 虚拟机和操作系统 环境:ubuntu14 hadoop2.6jdk1.7ssh 虚拟机:(vmware10) 二、集群安装环境设置…

poj doubles_余数运算符在Java中用于Doubles

poj doubles我在OSU任教已近两年了,这总是令我惊讶,我从学生那里学到了多少。 例如,过去, 我让学生写一些我不理解的奇怪代码 。 在这一点上,即使经过300多个博客文章, 几个YouTube视频 ,甚至还…

面向对象与面向过程

一、面向过程编程 面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的。二、面向对象编程 面向对象编程是将事物对象化,通过对象通信来解决问题。面…

本地方法(JNI)——数值参数与返回值

【0】README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)——数值参数与返回值 的基础知识 ; 2) for source code, please visit https://github.com/pacosonTang/core-java…

class employe_Java 8 –集合sort()方法–按Employe对象(Id,名称,年龄)列出自定义排序示例

class employe有关在Java中对自定义对象进行排序的完整指南。 Collections.sort()方法基于Comparable或Comparator实现进行排序。 用于对Employee对象进行排序的示例自定义排序 1.简介 在本教程中,您将学习如何在java中对Custom对象进行排序…

Spring入门(一)之简介

一、Spring定义 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。 简单来说,Spring是一个分层的JavaSE/javaEE full-stack(全栈的) 轻量级开源框架。 二、Spring框架特征 (1&#xff…

本地方法(JNI)——访问域+字符串参数

【0】README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)——访问域字符串参数 的基础知识 ; 2) for source code, please visit https://github.com/pacosonTang/core-java…

aws上负载均衡器标组端口_AWS CloudFormation:目标组没有关联的负载均衡器

aws上负载均衡器标组端口昨天,我使用AWS CloudFormation模板最终创建了ECS服务(Fargate类型),还创建了包括应用程序负载均衡器,目标组和IAM角色的资源。 创建堆栈时,出现以下错误: 具有target…

Spring入门(二)之下载与安装

一、Spring下载 参考其他博客:http://www.cnblogs.com/yjmyzz/p/3847364.html或http://blog.csdn.net/xinzhujin/article/details/54319043 Spring下载地址为:http://repo.spring.io/release/org/springframework/spring/ 二、压缩包下的SpringFramewo…

HttpClient 4 API –获取状态代码-getStatusLine()。getStatusCode()示例

在HttpClient API中获取状态代码的快速指南。 getStatusLine()。getStatusCode()示例和相关的错误。 1.简介 在这个非常快速的教程中,我将展示如何使用HttpClient 4获取和验证HTTP响应的StatusCode。 2. Maven依赖 要…

Spring入门(三)之IoC

一、IoC定义IoC,即控制反转。开发者在使用类的实例之前,需要先创建对象的实例。但是IoC将创建实例的任务交给IoC容器,这样开发应用代码时只需要直接使用类的实例,这就是IoC。在讨论控制反转这个概念的过程中,Martin Fo…

云服务器的优点和缺点_为什么要使用云计算? 的优点和缺点

云服务器的优点和缺点在过去的几年中,云计算一直是IT界的热门话题。 像许多事物一样,当它第一次出现时,很多人都将其视为下一件大事,但是云计算确实达到了期望,并真正改变了当今信息技术业务部门的运作方式。 云计算由…

本地方法(JNI)——编码签名

【0】README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)——编码签名 的基础知识 ; 【1】编码签名相关 1) 混编规则:为了访问实例域和调用用 java 定义的方法&a…

Shell入门(一)之简介

一、Shell 定义 (1)Shell Shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 (2)Shell 脚本(shell script) Shell 脚本…

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

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

本地方法(JNI)——调用 java 方法

【0】README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)——调用 java 方法 的基础知识 ; 2) C语言调用java 方法,包括: 静态C 方法 和 非静态C 方法…