需求:通过Jolt Transformation实现节点匹配与名称映射
Jolt 转换实现节点名称匹配需求
需求说明
- 匹配输入中的
sourceNode与nodes子数组内的node.id,匹配成功则新增sourceNodeName字段,赋值为对应node.name - 匹配输入中的
targetNode与nodes子数组内的node.id,匹配成功则新增targetNodeName字段,赋值为对应node.name - 保留原有的
sourceNode和targetNode字段
输入示例
{ "nodes": [ { "id": "Type:APPLICATION_COMPONENT, id:206180", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "WebFrontEnd", "viewPermission": true, "agentUp": false }, { "id": "Type:APPLICATION_COMPONENT, id:206183", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "AccountManagement", "viewPermission": true, "agentUp": false }, { "id": "Type:APPLICATION_COMPONENT, id:206188", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "PerLoanServices", "viewPermission": true, "agentUp": false }, { "id": "Type:APPLICATION_COMPONENT, id:206182", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "PolicyServices", "viewPermission": true, "agentUp": false }, { "id": "Type:APPLICATION_COMPONENT, id:206184", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "BizLoanServices", "viewPermission": true, "agentUp": false }, { "id": "Type:APPLICATION_COMPONENT, id:206185", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "BalanceServices", "viewPermission": true, "agentUp": false }, { "id": "Type:APPLICATION_COMPONENT, id:206186", "flowMapNodeType": "MAIN_DASHBOARD_NODE", "name": "SessionTracking", "viewPermission": true, "agentUp": false } ], "sourceNode": "Type:APPLICATION_COMPONENT, id:206183", "targetNode": "Type:APPLICATION_COMPONENT, id:206184" }
期望输出
{ "sourceNodeName" : "AccountManagement", "targetNodeName" : "BizLoanServices", "sourceNode" : "Type:APPLICATION_COMPONENT, id:206183", "targetNode" : "Type:APPLICATION_COMPONENT, id:206184" }
Jolt 转换规则
[ { "operation": "shift", "spec": { "nodes": { "*": { "id": "tmp.&", "name": "tmp.&1" } }, "sourceNode": ["sourceNode", "sourceNodeName"], "targetNode": ["targetNode", "targetNodeName"] } }, { "operation": "shift", "spec": { "sourceNode": "&", "targetNode": "&", "tmp": { "@(2,sourceNode)": "sourceNodeName", "@(2,targetNode)": "targetNodeName" } } } ]
规则说明
第一个Shift操作:
- 将
nodes数组中的每个元素转换为tmp对象下的键值对,键为id的值,值为对应的name - 同时保留
sourceNode和targetNode的原始值,并为后续匹配预留字段占位
- 将
第二个Shift操作:
- 保留原始的
sourceNode和targetNode字段 - 通过
@(2,sourceNode)引用上层的sourceNode值,从tmp对象中取出对应名称赋值给sourceNodeName - 同理,通过
@(2,targetNode)取出对应名称赋值给targetNodeName - 自动丢弃临时的
tmp对象,得到最终期望结构
- 保留原始的
内容的提问来源于stack exchange,提问作者priyanka
相关产品推荐
相关产品推荐

