请求实现一对多关系的Jolt转换(含规则与示例)
实现指定规则的Jolt转换
转换规则
- 若条目
tierId与自身sourceNodeID匹配(至少存在一个这类条目):- 将该条目的
name字段重命名为sourceNodename - 用该条目的
targetNodeID匹配整个输入数组中所有tierId与之相等的条目,建立一对多关联,将匹配到的条目name作为targetNodename补充到结果中
- 将该条目的
输入示例
[ { "name": "account-management--1", "tierId": 206183, "sourceNodeID": "206183", "targetNodeID": "206184" }, { "name": "biz-loan-services--1", "tierId": 206184, "sourceNodeID": "206183", "targetNodeID": "206184" }, { "name": "biz-loan-services--2", "tierId": 206184, "sourceNodeID": "206183", "targetNodeID": "206184" } ]
期望输出
[ { "sourceNodename": "account-management--1", "tierId": 206183, "sourceNodeID": "206183", "targetNodeID": "206184", "targetNodename": "biz-loan-services--1" }, { "sourceNodename": "account-management--1", "tierId": 206183, "sourceNodeID": "206183", "targetNodeID": "206184", "targetNodename": "biz-loan-services--2" } ]
Jolt转换规范
[ // 按tierId分组,存储每个tierId对应的所有name,方便后续匹配targetNodename { "operation": "shift", "spec": { "*": { "tierId": "tierMap.&", "name": "tierMap.&[]" } } }, // 保留原始数组,同时合并分组后的tierMap { "operation": "shift", "spec": { "tierMap": "tierMap", "0": "originalArray" } }, // 筛选出tierId等于sourceNodeID的源节点,关联对应的targetNodename列表 { "operation": "shift", "spec": { "originalArray": { "*": { "tierId": { "@(2,sourceNodeID)": { "@(2,tierId)": "result[#2].tierId", "@(2,sourceNodeID)": "result[#2].sourceNodeID", "@(2,targetNodeID)": "result[#2].targetNodeID", "@(2,name)": "result[#2].sourceNodename", "@(3,tierMap.@(2,targetNodeID))": "result[#2].targetNodename[]" } } } } } }, // 将targetNodename数组展开,形成一对多结构 { "operation": "shift", "spec": { "result": { "*": { "targetNodename": { "*": { "@2,tierId": "[#3].tierId", "@2,sourceNodeID": "[#3].sourceNodeID", "@2,targetNodeID": "[#3].targetNodeID", "@2,sourceNodename": "[#3].sourceNodename", "@": "[#3].targetNodename" } } } } } } ]
转换说明
- 分组映射:把所有条目按
tierId归类,收集对应tierId的所有name到tierMap,后续可快速通过targetNodeID获取目标节点名称列表。 - 筛选源节点:从原始数组中挑出
tierId与自身sourceNodeID匹配的条目,搭建结果基础结构并关联目标节点名称列表。 - 展开一对多:将每个源节点对应的目标名称列表展开,生成多条结果条目,完成一对多关联。
内容的提问来源于stack exchange,提问作者priyanka
相关产品推荐
相关产品推荐

