ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)

第六讲教程只简单介绍了Jolt的chain转换模式,本节课介绍下Jolt的各种转换模式。

点击的处理器JoltTransformJSON高级配置选项,进行测试Jolt的转换模式。

 

1、Cardinality:更改了输入JSON数据元素的基数,适用于jsonObj和jsonList 之间的转换。

list转为obj

 

input

{
    "review": {
        "nameArry": ["Javax 小金刚", "Javax 大金刚"]
    },
    "data": {
        "nameList": [{
            "id": "1",
            "name": "Javax 小金刚"
        }, {
            "id": "2",
            "name": "Javax 大金刚"
        }]
    },
    "isMap": {
        "singleName": "Javax 小金刚"
    },
    "myName": "Javax 小金刚",
    "emptyListContainer": {
        "emptyList": []
    },
    "nullData": null
}

 

Jolt Specification

{

        "review" : {
           "nameArry" : "ONE"
        },

        "data" : {
            "nameList" : "ONE"
        },

        "isMap" : "ONE",

        "myName" : "ONE",

        "emptyListContainer" : {
            "emptyList" : "ONE"
        },

        "nullData" : "ONE"

    }

output

{
    "review": {
        "nameArry": "Javax 小金刚"
    },
    "data": {
        "nameList": {
            "id": "1",
            "name": "Javax 小金刚"
        }
    },
    "isMap": {
        "singleName": "Javax 小金刚"
    },
    "myName": "Javax 小金刚",
    "emptyListContainer": {
        "emptyList": null
    },
    "nullData": null
}

 

obj转为list

 

 input

{
   "myName" : "Javax 小金刚"
}

Jolt Specification

{
    "myName" : "MANY"
}

output

{
    "myName": ["Javax 小金刚"]
}

 

2、Default:如果输入中不存在指定的字段,则添加默认值。

 

 input

 

{
   "myName" : "Javax 小金刚"
}

Jolt Specification

{
   "age" : 18
}

output

{
    "myName": "Javax 小金刚",
    "age": 18
}

 

3、Modify -Default:修改字段的值,如果字段不存在则添加默认值,如果字段存在不做处理。

 

input

{
   "myName" : "Javax 小金刚",
   "playGames":"太空战士"
}

Jolt Specification

{
   "playGames":"过家家"
}

 

output

{
    "myName": "Javax 小金刚",
    "playGames": "太空战士"
}

 

4、Modify - Define:修改字段的值,如果字段不存在则创建该字段并赋值,测试结果同Modify - Define。


5、Modify - Overwrite:修改字段的值,如果字段不存在则忽略,存在的话强制覆盖。

 

 input

{
   "myName" : "Javax 小金刚",
   "playGames":"太空战士"
}

 

Jolt Specification

{
   "playGames":"过家家"
}

 

output

{
    "myName": "Javax 小金刚",
    "playGames": "过家家"
}

 

6、Remove:移除指定的字段。

 

 input

{
   "myName" : "Javax 小金刚",
  "playGames":"太空战士"
}

Jolt Specification

{
   "playGames":""
}

 

output

{
    "myName": "Javax 小金刚"
}

 

7、Shift:将字段的值移动到另一个字段下。

 

 input

{
   "name" : "Javax 小金刚",
   "id":"1"
}

 

Jolt Specification

{
   "name":"person.name",
   "id":"person.id"
}

 

output

{
    "person": {
        "name": "Javax 小金刚",
        "id": "1"
    }
}

 

8、Sort:对对象中的字段进行排序(按字母顺序)。

 

 input

{
"d":"test1",
"c":"test2",
"b":"test3",
"a":"test4"
}

 

Jolt Specification

output

{
    "a": "test4",
    "b": "test3",
    "c": "test2",
    "d": "test1"
}

 


9、Custom:自定义转换规则,需要自定义转换插件,后续讲解,本次略。

10、Chain:按顺序应用多个转换规则,将上面提到的规则合并到一起顺序执行多个转换规则。

 input

  {
     "id":"1",
     "name":"Java小金刚"
  }

 

Jolt Specification

[
  {
    "operation": "shift",
    "spec": {
      "id":"person.id",
       "name":"person.name"
    }
  },
  {
    "operation": "default",
    "spec": {
      "ext":"备注"
    }
  }
]

 

output

{
    "person": {
        "id": "1",
        "name": "Java小金刚"
    },
    "ext": "备注"
}

 

 

注:这里仅仅介绍了常用的示例,实际工作用更多的是用到chain这个。还有很多高级的用法,大家可以自行探索下。

传送门:https://github.com/bazaarvoice/jolt/tree/master/jolt-core/src/test/resources/json

 

 

posted @ 2024-04-02 18:24  慕容尘轩  阅读(188)  评论(0编辑  收藏  举报