JSON JOLT常用示例整理

JSON JOLT常用示例整理

1、什么是jolt

Jolt是用Java编写的JSON到JSON转换库,其中指示如何转换的"specification"本身就是一个JSON文档。以下文档中,我统一以 Spec 代替如何转换的"specification"json文档。以LHS(left hand side)代表Spec json的keys,RHS(right hand side)代表Spec json的values。部分示例都是摘取于Jolt源代码注释文档。

用处:

  1. 将从ElasticSearch、MongoDb、Cassandra等等取出的数据转换后输出出来
  2. 从大型JSON文档中提取数据供自己使用

2、常用网站

  • Jolt GitHub: https://github.com/bazaarvoice/jolt (opens new window)

  • Jolt online demo: https://jolt-demo.appspot.com

3、转换示例

3.1 基础转换

字段key转换,若转换中没有该key值,可以给默认值,json spec如下

[{"operation": "shift","spec": {"user": {"username": ["NAME", "USERCODE"],"password": "PWD"}}},{"operation": "default","spec": {"SEX": "1"}}
]

在这里插入图片描述

3.2 字典判断转换

比如第三方传递过来的性别编码和自身系统的不一致,需要在json转换的时候进行转换

下面举例第三方返回的集合数据,进行数据转换

1、需要把性别编码

  • 1.2.156.112604.1.2.5.2—>0

  • 1.2.156.112604.1.2.5.3—>1

2、把患者年龄的【岁】字去掉,保留数字

json spec如下

[{"operation": "shift","spec": {"data": {"*": {"patName": "data[&1].patientName","patBirth": "data[&1].birthDay","patPhone": "data[&1].phone","patAddress": "data[&1].address","patIdCard": "data[&1].idCardNumber","patSexCode": {"1.2.156.112604.1.2.5.2": {//自身系统的性别未0 是男 ,1是女"#0": "data[&3].sex"},"1.2.156.112604.1.2.5.3": {"#1": "data[&3].sex"}},"ageStr": {"*岁": {"$(0,1)": "data[&3].age"}}}}}},{"operation": "default","spec": {"count": 0,"status": true,"data": []}}, {"operation": "default","spec": {"data[]": {"*": {"cardType": "1","patientStatus": 0,"nation": "01"}}}}
]

在这里插入图片描述

3.3 单字段转数组

{

“name”:“arr[]”

}

3.4 集合LIST中判断取值

第三方传递过来的数据是一个集合数据包含了(门诊号、病历号等等),需要根据不同的key值进行判断取值

在这里插入图片描述

输入json

{"patient": {"classCode": "PAT","id": {"item": [{"extension": "02","root": "1.2.156.112606.1.2.1.2"},{"extension": "30341855","root": "1.2.156.112606.1.2.1.3"},{"extension": "8016698","root": "1.2.156.112606.1.2.1.12"},{"extension": "305247745248301056","root": "1.2.156.112606.1.2.1.13"},{"extension": "","root": "1.2.156.112606.1.2.1.101"},{"extension": "8016698","root": "1.2.156.112606.1.2.1.102"},{"extension": "202300079171","root": "1.2.156.112606.1.2.1.103"}]}}
}

转换的json spec

[{"operation": "shift","spec": {"patient": {"id": {"item": {"*": {"root": {// 患者ID"1.2.156.112606.1.2.1.3": {"@(2,extension)": "patientId"},//住院号"1.2.156.112606.1.2.1.12": {"@(2,extension)": "inpatientNo"},//就诊标识"1.2.156.112606.1.2.1.13": {"@(2,extension)": "encounterId"},//门诊病历号"1.2.156.112606.1.2.1.101": {"@(2,extension)": "outpatientMedicalNo"},//住院病历号"1.2.156.112606.1.2.1.102": {"@(2,extension)": "inHospitalMedicalNo"},//病案号"1.2.156.112606.1.2.1.103": {"@(2,extension)": "bah"}}}}}}}}
]

3.5 取数组的第一个

获取数组的第一个对象值

输入json

{"data": [{"name": "zhangsan","age": "22"},{"name": "lisi","age": "33"}],"status": "true"
}

转换json spec

[{"operation": "shift","spec": {"data": {"0": "nameObj"}}}
]

在这里插入图片描述

3.6 多条件取值

满足下面条件

//a=1 赋值给字段c=123
//b=1 赋值给字段c=321
//如果都不满足给个默认值 c=888

输入json

{"a":"1","b":"1"}

转换json spec

[{"operation": "shift","spec": {"a": {"1": {"#123": "tempArr[]"}},"b": {"1": {"#321": "tempArr[]"}}}},{"operation": "shift","spec": {"tempArr": {"0": "c"}}},{"operation": "default","spec": {//如果上面都不匹配,给一个默认值"c": "888"}}
]

在这里插入图片描述

3.7 字段字符串拼接

需要将下面的name1+name2+name3 拼接起来去掉为空的值

输入json

{"Request": {"Body": {"nameObj": {"name1": "hello","name2": "world","name3": "happy" }}}   
}

转换json spec

[{"operation": "shift","spec": {"Request": {"Body": {"nameObj": {"name1": "name1","name2": "name2","name3": "name3"}}}}},{"operation": "modify-overwrite-beta","spec": {"name1": {"null": null},"name2": {"null": null},"name3": {"null": null},"Request": {"Body": {"person": {//直接拼接"nameStr": "=concat(@(4,name1), @(4,name2),  @(4,name3))",//用-连接"nameStr2": "=concat(@(4,name1),'-', @(4,name2),'-',  @(4,name3))"}}}}},{"operation": "remove","spec": {// 指定要移除的字段的路径  "name1": "","name2": "","name3": ""}}
]

在这里插入图片描述

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

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

相关文章

云计算基础技术

网络类技术 网络的作用 网络是设备间、虚拟机之间通信的桥梁。因此,在ICT基础设施中,网络是必不可少的。 传统网络的基本概念 广播和单播:两个设备通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的…

从零开始搭建spring boot多模块项目

一、搭建父级模块 1、打开idea,选择file–new–project 2、选择Spring Initializr,选择相关java版本,点击“Next” 3、填写父级模块信息 选择/填写group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。点击“…

容器内存

一、容器内存概述 容器本质上还是一个进程,是一个被隔离和限制的进程。因此容器内存和进程内存在表现形式上其实是一样的,这块主要涉及三部分内容:RSS,page cache和swap这三部分,容器基于memory Cgroup对内存进行限制…

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡

1、相关原理 在网络中,如果一台作为默认网关的三层交换机或者路由器损坏,所有使用该网关为下一跳的主机通信必然中断,即使配置多个默认网关,在不重启终端的情况下,也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…

Paragon NTFS与Tuxera NTFS有何区别 Mac NTFS 磁盘读写工具选哪个好

macOS系统虽然以稳定、安全系数高等优点著称,但因其封闭性,不能对NTFS格式磁盘写入数据常被人们诟病。优质的解决方案是使用磁盘管理软件Paragon NTFS for Mac(点击获取激活码)和Tuxera NTFS(点击获取激活码&#xff0…

消防认证-防火卷帘

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准,且通过了国家认证认可监督管理委员会审批,获得消防认证资质的认证机构颁发的证书,消防产品具有完好的防火功能,是住房和城乡建设领域验收的重要指标。 二、认证依据…

springboot学习,如何用redission实现分布式锁

目录 一、springboot框架介绍二、redission是什么三、什么是分布式锁四、如何用redission实现分布式锁 一、springboot框架介绍 Spring Boot是一个开源的Java框架,由Pivotal团队(现为VMware的一部分)于2013年推出。它旨在简化Spring应用程序…

C# 警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset”

警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset” C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.CSharp.CurrentVersion.targets(129,9): warning MSB3884: 无法找到规则集文件“MinimumRe…

SpringMVC的基本使用

SpringMVC简介 SpringMVC是Spring提供的一套建立在Servlet基础上,基于MVC模式的web解决方案 SpringMVC核心组件 DispatcherServlet:前置控制器,来自客户端的所有请求都经由DispatcherServlet进行处理和分发Handler:处理器&…

【观察】戴尔科技+AMD:释放技术创新“乘数效应”,助力制造业打造“新质生产力”...

在今年的政府工作报告中,“人工智能”首次被写入报告,同时“大力推进现代化产业体系建设,加快发展新质生产力”也被列为2024年的首项政府工作任务,其重要性不言而喻。 尤其是最近几年,以人工智能、大模型、大数据、云计…

成人职场商务英语学习柯桥外语学校|邮件中的“备注”用英语怎么说?

在英语中,"备注"通常可以翻译为"Notes" 或 "Remarks"。 这两个词在邮件中都很常用。例如: 1. Notes Notes: 是最通用和最常见的表达,可以用在各种情况下,例如: 提供有关电子邮件内容的附加信息 列…

深入解析 androidx.databinding.Bindable 注解

在现代 Android 开发中,数据绑定 (Data Binding) 是一个非常重要的技术。它使得我们能够简化 UI 和业务逻辑之间的连接,从而提高代码的可读性和维护性。在数据绑定中,Bindable 注解是一个关键部分,它帮助我们实现双向数据绑定和自…

编写动态库

1.创建库.c .h文件 2.编写Makefile文件 3.make之后形成.so文件 4.make output,形成mylib 5.把mylib拷贝到test里面 mv mylib /test 6.编译 gcc main.c -I mylib/include -L mylib/lib -lmymethod形成a.out 但是直接执行会出现以下问题 很显然没有找到动态库 7.解决加载找不…

怎样在《语文世界》期刊上发表论文?

怎样在《语文世界》期刊上发表论文? 《语文世界》知网国家级 1.5-2版 2500字符左右 正常收25年4-6月版面 可加急24年内(初中,高中,中职,高职,大学均可,操作周期2个月左右) 《语文世…

MM-LLM:使用Llava类构建图文多模态大模型实践

多模态大模型的结构如上,llava是用两层MLP作为连接器。该模式也是后续很多工作的基础。 本文主要参考了https://github.com/yuanzhoulvpi2017/zero_nlp/tree/main/train_llava的工作,最初是在b站看到的,讲解的很细致。 基础模型 大语言模型…

Xilinx FPGA:vivado利用单端RAM/串口传输数据实现自定义私有协议

一、项目要求 实现自定义私有协议,如:pc端产生数据:02 56 38 ,“02”代表要发送数据的个数,“56”“38”需要写进RAM中。当按键信号到来时,将“56”“38”读出返回给PC端。 二、信号流向图 三、状态…

真的假不了,假的真不了

大家好,我是瑶琴呀,拥有一头黑长直秀发的女程序员。 最近,17岁的中专生姜萍参加阿里巴巴 2024 年的全球数学竞赛,取得了 12 名的好成绩,一时间在网上沸腾不止。 从最开始的“数学天才”,到被质疑&#xff…

Linux CentOS 环境 MySQL 主从复制集群搭建

环境说明 MySQL版本8.4.0 操作系统 Linux CentOS 7.9 官网文档 https://dev.mysql.com/doc/refman/8.4/en/replication-configuration.html 以下代码片段中带分号都是在MySQL命令行( mysql -uroot -p)中执行 1. 首先在两个节点上安装数据库 参考 Linux CentOS安装MySQL8.0 …

C++编程(五)单例模式 友元

文章目录 一、单例模式(一)概念(二)实现方式1. 饿汉式2. 懒汉式 二、友元(一)概念(二)友元函数1.概念2.语法格式3. 使用示例访问静态成员变量访问非静态成员变量 (三&…

Victor CMS v1.0 SQL 注入漏洞(CVE-2022-28060)

前言 CVE-2022-28060 是 Victor CMS v1.0 中的一个SQL注入漏洞。该漏洞存在于 /includes/login.php 文件中的 user_name 参数。攻击者可以通过发送特制的 SQL 语句,利用这个漏洞执行未授权的数据库操作,从而访问或修改数据库中的敏感信息。 漏洞详细信…