您的位置:首页 > 财经 > 金融 > JSON JOLT常用示例整理

JSON JOLT常用示例整理

2024/12/23 13:47:28 来源:https://blog.csdn.net/qq_37493556/article/details/140137463  浏览:    关键词: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": ""}}
]

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com