Jolt数组字符串拼接问题:无法实现预期输出求助
解决Jolt数组姓名拼接合并问题
输入JSON
[ { "policy": "Name", "setFrstNm": "John" }, { "setLastNm": "Jammy", "policy": "Name" }, { "policy": "Name", "set1FrstNm": "sam" }, { "policy": "Name", "set1LastNm": "jim" }, { "policy": "Name", "set2FrstNm1": "jun" }, { "set2LastNm1": "san", "policy": "Name" } ]
期望输出JSON
[ { "setfullname": "John jammy", "policy": "Name" }, { "set1fullname": "sam jim", "policy": "Name" }, { "set2fullname": "jun san", "policy": "Name" } ]
问题分析
你之前的规则仅针对单个对象处理,无法跨对象获取同组的姓名字段,因此无法完成拼接。核心思路是先将每一组的两个对象合并,再进行字段拼接。
正确Jolt规则
[ // 1. 将数组每两个元素归为同一分组 { "operation": "shift", "spec": { "0": "group0", "1": "group0", "2": "group1", "3": "group1", "4": "group2", "5": "group2" } }, // 2. 合并分组内的所有字段到同一对象 { "operation": "shift", "spec": { "*": { "*": "&1.&" } } }, // 3. 拼接对应姓名字段,生成fullname { "operation": "modify-default-beta", "spec": { "group0": { "setfullname": "=concat(@(1,setFrstNm),' ',@(1,setLastNm))", "policy": "Name" }, "group1": { "set1fullname": "=concat(@(1,set1FrstNm),' ',@(1,set1LastNm))", "policy": "Name" }, "group2": { "set2fullname": "=concat(@(1,set2FrstNm1),' ',@(1,set2LastNm1))", "policy": "Name" } } }, // 4. 删除原始的姓名字段 { "operation": "remove", "spec": { "*": ["setFrstNm", "setLastNm", "set1FrstNm", "set1LastNm", "set2FrstNm1", "set2LastNm1"] } }, // 5. 将分组转换为数组结构 { "operation": "shift", "spec": { "*": "[]" } } ]
规则说明
- 分组:第一个
shift操作把输入数组中每两个相邻对象归到同一个分组(group0/group1/group2),确保同组的姓名字段处于同一层级。 - 字段合并:第二个
shift操作将分组内的多个对象字段合并为一个对象,让拼接时能同时获取到同组的姓和名。 - 姓名拼接:使用
modify-default-beta的concat函数,将每组的姓名字段拼接成完整姓名,同时保留policy字段。 - 清理冗余:
remove操作删除不再需要的原始姓名字段,精简输出结构。 - 转换数组:最后一个
shift操作将分组对象转换为数组,匹配期望的输出格式。
内容的提问来源于stack exchange,提问作者Manimaran Dhandapani
相关产品推荐
相关产品推荐

