使用阿里巴巴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映射
使用阿里巴巴json映射_使用JSON模式验证来映射稀疏JSON相关推荐
- controller接收json数据_答疑 | 前后端分离,如何接收json数据?
1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错. 答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具 ...
- 校验json格式_格式化展示,校验错误,编辑JSON,这几个JSON工具一定不能错过
今天给大家介绍几个常用JSON的工具,基本上能满足你工作中对JSON的所有需求 google插件 JSONView 安装好插件后,格式化接口返回的JSON,还能展开节点和关闭节点,超级方便 格式化本地 ...
- flex bison解析json文件_每秒解析千兆字节的 JSON 解析器开源了
本文转自我们的网站 InfoQ,译者无明.除了推荐 simdjson 之外,还想测试一下微信平台编辑器的代码样式功能. 事实证明,微信文章的代码展示能力很强了.非常棒. 近日,GitHub 开源了一 ...
- 使用JSON模式验证来映射稀疏JSON
在本文中,我们将介绍创建和共享API时出现的问题. 特别是,需要: 表达数据的结构 提供对该数据的验证 允许将来改变主意 通过您拥有的部分数据与客户进行沟通 缺少数据时填写空白 人们通常使用版本编号的 ...
- c#如何将多个json合并_合并两个c#对象(json)列表作为父级子级
我有一个看起来像下面的json字符串: [ { "id": 1, "title": "Hello" }, { "id": ...
- java读取json配置文件_解决:java 读取 resources 下面的 json 文件
前言:java 读取 工程下的配置文件,文件类型为 json(*.json),记录一下始终读取不到 json 文件的坑.maven项目 直接上工具类代码 package com.yule.compon ...
- mysql json坑_使用mysql innodb 使用5.7的json类型遇到的坑和解决办法
---------------------------------------------- #查询JSON的某个字段 select data -> '$.Host' from temp #创建 ...
- php将mysql转换为json字符串_在PHP中将MySQL记录集转换为JSON字符串
小编典典 这应该工作: function recordSetToJson($mysql_result) { $rs = array(); while($rs[] = mysql_fetch_assoc ...
- java反向映射_推荐一款Java对象映射神器,别再傻傻手动转换了!
点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...
最新文章
- 函数平移口诀_呆哥数学函数合集——函数的图形变换来啦【4】
- idea控制台输出乱码
- 重学前端-js的类型问题
- [渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(2)
- 前端学习(3320):undefine和null 3
- js客户端存储之Web存储
- .NET开发人员十大必备下载工具
- VSS新建项目后导致项目组成员不能打开解决方案的解决方法
- 无缝向上滚动文字代码(Js+div),可用在公告栏
- 【高手分享】熟知Win7系统(英文版)分区14个小步骤
- 求助,关于MFC中的 Secur32.lib问题
- 编程彩虹c语言,c – 如何渲染彩虹光谱?
- PC端网页布局——世纪佳缘(二)页面初搭建
- android sdk引入 微信分享_Android分享 ShareSDK微信分享详解
- androidの读取短信内容
- MAC M1/M2安装ADOBE等第三方软件问题终极解决 “开启任何来源”“无法检查更新,请确认您已接入互联网”“移除下载镜像的Quarantine属性” “闪退”【MACBOOK】
- 基于stm32的两轮自平衡小车3(硬件篇)
- 认证学习4 - Bearer认证(Token认证)讲解、代码实现、演示
- Windows10安装Oracle-19C 报错 INS-32010
- chinapay 新版php接口,银联电子支付(chinapay)接口配置
热门文章
- cf1511B. GCD Length
- Codeforces Round #715 (Div. 2)
- 【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)
- CF903G-Yet Another Maxflow Problem【线段树,最大流】
- P5253-丢番图【数论】
- jzoj1370-飞船【RMQ初见】
- 2021牛客暑期多校训练营4 E-Tree Xor(异或+思维+区间交 or Trie树)
- AtCoder Beginner Contest 177总结
- 【模拟】【递归】电子表格(jzoj 2127)
- [集训队作业2018] 三角形(贪心,堆,线段树合并)