使用阿里巴巴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相关推荐

  1. controller接收json数据_答疑 | 前后端分离,如何接收json数据?

    1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错. 答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具 ...

  2. 校验json格式_格式化展示,校验错误,编辑JSON,这几个JSON工具一定不能错过

    今天给大家介绍几个常用JSON的工具,基本上能满足你工作中对JSON的所有需求 google插件 JSONView 安装好插件后,格式化接口返回的JSON,还能展开节点和关闭节点,超级方便 格式化本地 ...

  3. flex bison解析json文件_每秒解析千兆字节的 JSON 解析器开源了

    本文转自我们的网站 InfoQ,译者无明.除了推荐 simdjson 之外,还想测试一下微信平台编辑器的代码样式功能. 事实证明,微信文章的代码展示能力很强了.非常棒. 近日,GitHub 开源了一 ...

  4. 使用JSON模式验证来映射稀疏JSON

    在本文中,我们将介绍创建和共享API时出现的问题. 特别是,需要: 表达数据的结构 提供对该数据的验证 允许将来改变主意 通过您拥有的部分数据与客户进行沟通 缺少数据时填写空白 人们通常使用版本编号的 ...

  5. c#如何将多个json合并_合并两个c#对象(json)列表作为父级子级

    我有一个看起来像下面的json字符串: [ { "id": 1, "title": "Hello" }, { "id": ...

  6. java读取json配置文件_解决:java 读取 resources 下面的 json 文件

    前言:java 读取 工程下的配置文件,文件类型为 json(*.json),记录一下始终读取不到 json 文件的坑.maven项目 直接上工具类代码 package com.yule.compon ...

  7. mysql json坑_使用mysql innodb 使用5.7的json类型遇到的坑和解决办法

    ---------------------------------------------- #查询JSON的某个字段 select data -> '$.Host' from temp #创建 ...

  8. php将mysql转换为json字符串_在PHP中将MySQL记录集转换为JSON字符串

    小编典典 这应该工作: function recordSetToJson($mysql_result) { $rs = array(); while($rs[] = mysql_fetch_assoc ...

  9. java反向映射_推荐一款Java对象映射神器,别再傻傻手动转换了!

    点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...

最新文章

  1. 函数平移口诀_呆哥数学函数合集——函数的图形变换来啦【4】
  2. idea控制台输出乱码
  3. 重学前端-js的类型问题
  4. [渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(2)
  5. 前端学习(3320):undefine和null 3
  6. js客户端存储之Web存储
  7. .NET开发人员十大必备下载工具
  8. VSS新建项目后导致项目组成员不能打开解决方案的解决方法
  9. 无缝向上滚动文字代码(Js+div),可用在公告栏
  10. 【高手分享】熟知Win7系统(英文版)分区14个小步骤
  11. 求助,关于MFC中的 Secur32.lib问题
  12. 编程彩虹c语言,c – 如何渲染彩虹光谱?
  13. PC端网页布局——世纪佳缘(二)页面初搭建
  14. android sdk引入 微信分享_Android分享 ShareSDK微信分享详解
  15. androidの读取短信内容
  16. MAC M1/M2安装ADOBE等第三方软件问题终极解决 “开启任何来源”“无法检查更新,请确认您已接入互联网”“移除下载镜像的Quarantine属性” “闪退”【MACBOOK】
  17. 基于stm32的两轮自平衡小车3(硬件篇)
  18. 认证学习4 - Bearer认证(Token认证)讲解、代码实现、演示
  19. Windows10安装Oracle-19C 报错 INS-32010
  20. chinapay 新版php接口,银联电子支付(chinapay)接口配置

热门文章

  1. cf1511B. GCD Length
  2. Codeforces Round #715 (Div. 2)
  3. 【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)
  4. CF903G-Yet Another Maxflow Problem【线段树,最大流】
  5. P5253-丢番图【数论】
  6. jzoj1370-飞船【RMQ初见】
  7. 2021牛客暑期多校训练营4 E-Tree Xor(异或+思维+区间交 or Trie树)
  8. AtCoder Beginner Contest 177总结
  9. 【模拟】【递归】电子表格(jzoj 2127)
  10. [集训队作业2018] 三角形(贪心,堆,线段树合并)