如何在Jolt中定义=removeRecursive移除所有familyName字段
你当前写的配置无法移除所有位置的familyName字段,问题出在两个地方:
- 根节点下的
"*"通配符仅能匹配最外层的第一层属性,不会向下遍历多层嵌套的子节点 - 直接给第一层通配符绑定
removeRecursive函数时,函数的递归作用范围仅限当前匹配节点的下属子属性,根节点本身如果存在familyName字段会被遗漏,同时深层嵌套节点的匹配逻辑也会受Jolt默认遍历深度限制失效。
正确配置方案
方案1:使用remove操作(推荐,兼容性最好)
该写法可以稳定覆盖根节点、任意深度嵌套对象、数组对象内的所有familyName字段,不受嵌套层级限制:
{ "operation": "remove", "spec": { "familyName": "", "*": { "**": { "familyName": "" } } } }
方案2:使用removeRecursive函数
如果要沿用modify-overwrite-beta操作+removeRecursive的写法,需要替换为递归全节点通配符~**,保证遍历范围覆盖所有层级:
{ "operation": "modify-overwrite-beta", "spec": { "~**": "=removeRecursive('familyName')" } }
效果验证
测试输入:
{ "familyName": "根级字段", "info": { "familyName": "二级嵌套字段", "extend": { "familyName": "三级嵌套字段", "createTime": "2024-01-01" } }, "userList": [ { "familyName": "数组内字段", "userId": 1001 } ] }
转换输出(所有familyName字段被完全移除):
{ "info": { "extend": { "createTime": "2024-01-01" } }, "userList": [ { "userId": 1001 } ] }
内容的提问来源于stack exchange,提问作者ronMilne
相关产品推荐
相关产品推荐

