一、什么是JOLT
- json与json转换的库,是一个很强大的json转json的工具。
- 在我们涉及Cassandra、ElasticSearch、Mongo的时候,很有可能就有这方面的需求。另写代码又不灵活,使用JOLT就很好了。
- 基本流程就是输入JSON格式数据A,使用Jolt描述语言(也是JSON ),得到想要的JSON格式数据B。
二、JOLT的理念
- 输入的数据(数据的节点),它要输出到输出数据的哪个位置?
// JSON Input
{
"rating": {
"quality": {
"value": 3
},
"primary": {
"value": 4
}
}
}
// JSON Transformation DSL
[{
"operation": "shift",
"spec": {
"rating": {
"primary": {
"value": "Rating"
},
"quality": {
"value": "SecondaryRating.quality.value"
}
}
}
}]
// JSON Output
{
"Rating": 4,
"SecondaryRating": {
"quality": {
"value": 3
}
}
}
- 要确定输出的格式 ,你想要什么样格式的输出Json?
- 使用 jolt规范语言去描述json转换动作。
三、JOLT语法-shift
1、概述
- Jolt其实是操作map
- 每一个小的转换都是基于一个DSL
- 可以把若干个小的转换串(chain )起来
- 基本样式如下: ```json [{ “operation”: “shift”, “spec”: { … } }]
[{ “operation”: “java”, “classname”: “com.bazaar..” “spec”: { … // optional } }]
[{ “operation”: “default” “spec”: { … } }]
// operation:”shift” // operation:”default” // operation:”remove” // operation:”sort” // operation:”java” ```
2、语法讲解
注:以下会以示例为先,在示例中层层递进得讲述jolt的语法规则。有输入数据,有想要输出数据的格式,那么关键就是这个Jolt Spec 怎么写?
2.1 先看正确的写法
2.1 字符串匹配(精确匹配)
- jolt spec 最简单的理解就是 (前面提过,将json当做map处理)key是“匹配”,value是“去哪”,告诉程序,匹配哪部分数据,这部分数据在输出数据的什么位置 。
demo
【*】是匹配输出数据一个节点下的所有子节点
- 【*】通配符的匹配优先级是在精确 匹配之后的
- demo
2.3 通配符【&】
- 【&】是匹配输出数据的【key】,将【key】当做数据来使用。
- 【&】其实是取【*】(或其他)匹配到的节点的【key】。
- 【&】是在描述-数据发送到输出数据 的什么位置上使用的,即jolt spet 的json脚本中的 value里(冒号右边)。
- demo
- 在上面示例中& &(0) &(0,0)都是等价的,拿到的key是: stats—colour—196—avgRating
- &(0,1) 取到的是 第一个通配符 * 匹配到的key值 :colour
- &(0,2) 取到的是 第二个通配符 * 匹配到的key值 :196
2.4 通配符【$】
- 【$】是在描述-数据发送到输入数据 的什么位置上使用的,即jolt spet 的Json脚本中的 key里(冒号左 边)。
- 取值 含义与【&】基本一样 。
2.5 通配符【@】
- 匹配value
2.6 通配符【[#2]】
- [] 是数组的意思,中间的#2值表示数组的下标,这里的#2会通过计算获取到第一个*所匹配到的数组下标。
版权声明:本文为CSDN博主「酷酷的诚(公众号:Panda诚)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36048246/article/details/89287200