Apache Nifi 系列 之 JOLT 语法解析
前言
今天先记录一下Jolt语法,因为在nifi流程中,学会jolt语法,可以对json进行随意转换成业务需要的格式,对后续使用 JoltTransformJSON 处理器帮助是巨大的。
一、JLOT是什么?
提供一组转换,可以“链接”在一起以形成整体 JSON 到 JSON 的转换。专注于转换 JSON 数据的结构,而不是操作特定的值
官网地址:
Jolt github官网
二、Demo 解析
1.input
{
"rating": {
"primary": {
"value": 3,
"max": 5
},
"quality": {
"value": 9,
"max": 5
},
"sharpness": {
"value": 7,
"max": 10
},
"a": {
"b": {
"d": 1,
"max": 20
}
}
}
}
2.json spec
[
{
"operation": "shift",
"spec": {
"rating": {
//左边是对应input,右边是对应输出的结构
// 输出 -> "Rating" : 3
// 输出 -> "RatingRange" : 5
"primary": {
"value": "Rating",
"max": "RatingRange"
},
// * 类似匹配 "rating.[除primary以外的节点]"
"*": {
//"rating.*.value"位置的数据移动到"SecondaryRatings.*.Value "
// &1表示,向上一级,获取那个值并代入 / &1 == &(1,0)
// &1 获取出来是什么? &0 是value ,&1就是quality,具体的获取逻辑看下图
"value": "SecondaryRatings.&(1,0).Value",
"max": "SecondaryRatings.&1.Range",
//"$"表示把input中json的key拿过来
"$": "SecondaryRatings.&1.id",
//这是我自己验证&(?) 如果我增加深层次的对象,怎么获取 &(2) == &(2,0) == &2
// * 获取到了a, 需要获取到d, 然后声明b,,在声明d,获取d的值, &(2)向上2级,SecondaryRatings.a.value
"b": {
"d": "SecondaryRatings.&(2).Value",
"max": "SecondaryRatings.&2.Range"
}
}
}
}
}
]
3. json output
{
"Rating" : 3,
"RatingRange" : 5,
"SecondaryRatings" : {
"quality" : {
"id" : "quality",
"Value" : 9,
"Range" : 5
},
"sharpness" : {
"id" : "sharpness",
"Value" : 7,
"Range" : 10
},
"a" : {
"id" : "a",
"Value" : 1,
"Range" : 20
}
}
}
Json Jolt教程
参考了 Panda诚 大佬的文字,然后知道了& 怎么获取,下图解释
总结
今天学习了jolt语法的 * & $
尤其是&(0,0)语法
$
{
"rating": {
"a": {
"b": {
"d": 1,
"max": 20
}
}
}
}
后续&(0,1) 继续学习