如何在Apache NiFi中用Jolt Transform实现指定JSON过滤需求?
Jolt Transform实现按动态指定username移除用户对象
需求说明
输入JSON包含users数组和communities数组,需根据动态传入的username值,移除users数组中对应该用户名的对象,其余内容(包括communities数组)完全保留。
输入示例
{ "users": [ { "username": "user1", "email": "user1@example.com" }, { "username": "user2", "email": "user2@example.com" }, { "username": "user3", "email": "user3@example.com" } ], "communities": [ { "id": "comm1", "name": "Community A" }, { "id": "comm2", "name": "Community B" } ] }
Jolt Transform 规范
假设动态传入的目标用户名用变量${targetUsername}表示,对应的Jolt转换规则如下:
[ { "operation": "modify-overwrite-beta", "spec": { "users": "=filter(@, !(\"${targetUsername}\" == @.username))" } } ]
规则解释
modify-overwrite-beta:用于修改现有字段的值,这里针对users数组做处理=filter内置函数:对数组元素进行过滤,仅保留符合条件的元素- 过滤条件
!(\"${targetUsername}\" == @.username):@代表当前遍历到的users数组元素@.username取当前元素的username属性- 整个条件表示:保留所有用户名不等于目标用户名的元素,也就是移除匹配的用户对象
测试效果
- 当
${targetUsername}设为user1时,输出会移除user1的对象,其余内容不变:
{ "users": [ { "username": "user2", "email": "user2@example.com" }, { "username": "user3", "email": "user3@example.com" } ], "communities": [ { "id": "comm1", "name": "Community A" }, { "id": "comm2", "name": "Community B" } ] }
- 如果目标用户名不存在(比如设为
user4),users数组会保持原样,不会有任何修改。
内容的提问来源于stack exchange,提问作者sandilya ch
相关产品推荐
相关产品推荐

