1.jolt语法规则说明
jolt是用来在json格式数据之间做数据转换处理的规则描述语言。它的主要作用是将一种json格式转化为另一种json格式。其原理是将输入json对象按层级结构遍历,匹配每个层级的属性,将匹配到的属性名或值转换成目标json对象指定层级下的属性。
Jolt自身也使用json格式来描述规则定义。通常使用一个json数组来表示多个转换处理步骤,每个转换步骤用一个json对象来表示。Jolt语言格式如下:
每个json格式表示的转换步骤都包含上面①operation和②spec两个属性描述
①operation表示转换场景,下文介绍主要转换场景及使用方法。
(1)shift: 主要作用是拷贝,将输入json的某个结构拷贝到目标json。转换过程主要做属性名称映射,层级结构转换等。
(2)default:主要作用是设置默认值,如果输入json某个value不存在,则使用默认值补齐
(3)remove: 主要作用是删除,可以删除输入json结构的某个结构
(4)sort: 对key值进行排序(暂无应用场景,无需关注)
②spec表示转换规则,转换规则在不同转换场景中有不同的应用,主要用于数据属性名变更,层级结构转换,设置属性默认值,删除某个属性值等。
理解下图:匹配,输入
shift转换的通配符
通配符的匹配优先级 是在精确 匹配之后的
1."*"
仅可以匹配输入json的key,不能匹配value。使用 “*”通配符的时候,需要保证所匹配的key在输入json中处于同一层级
* 是匹配输出数据一个节点下的所有子节点,匹配当前路径下的所有key
但是不会匹配已经被精准匹配过的节点
2."&"
& 的深入理解:&其实是取 *(或其他) 匹配到的节点的 key
rating-*匹配到rating-quality,rating-color,在Spec中,将匹配到的子节点()输出给SecondaryRatings.&(0,1).value
&(0,1)
匹配到第一个通配符*匹配到的key值
&(1,0) == &(1) == &1
[&1]![](https://i-blog.csdnimg.cn/blog_migrate/73118be8c840ef726b513d1d13a0e4fe.png)
“$”符
和"&"匹配的规则类似,但是使用在表达式左边。
但是使用在匹配数据中(表示式左边),取json数据的key作为值输入到目标表达式中
"@"符
"@"和"$"用法类似,不过"@"取得是指定key的value值,而“$”取的是指定位置key值
@符匹配到所在层级上一级的所有值作为输出
总结
通配符匹配,取值的规则,可以根据通配符在表达式中的位置来判断
如果在表达式右边,说明是要传输值,这时无论匹配到的是key值还是value值都要作为output的key值使用
如果在表达式左边,说明是要匹配值,这时无论匹配到是key值还是value值都要作为output的value值使用
*一般使用在表达式左边,匹配key值,传输key对应的value
&一般使用在表达式右边,匹配output需要的key值
$一般使用在表达式左边,匹配到key值,传输key对应的key
@一般使用在表达式左边(不固定),匹配key值对应的value,传输value
"#"符
"|"符
输入json
{
"sex":"male"
}
default转换
default转换比较简单,主要作用是预先设置一些默认值。只有当输入json中不存在该属性值时,才会使用默认值进行补齐。如果输入json中已存在某个属性,则默认值设置不生效
remove转换
remove也很简单,作用是删除input中的某些值。如果需要删除input中的个别字段,而其他字段保持不变,建议使用该转换
modify转换
modify转换用于修改输入json的属性值,可选的operation值有:
1)、"modify-default-beta":用于向输出json添加输入json中不存在的属性并给属性赋值,若输入json中属性已存在,则不执行修改操作
2)、” modify-overwrite-beta”:用于覆盖修改输入json中的属性值,若输入json中属性不存在,则添加;若输入json中属性已存在,则修改该值