第六讲教程只简单介绍了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