Jolt转换需求:合并第7、8位值并生成目标JSON结构
Jolt JSON转换:分组拼接姓名与合并Session字段
需求说明
- 将输入JSON数组中
policy为Name的条目按前缀(PA/PP/PP1)分组,把对应姓名片段(FrstNm/MiNm/LastNm)按名+中间名+姓的顺序拼接为完整姓名字段(如PAfullnam) - 将
policy为Other的Summer和Winter值合并为Session字段,用空格分隔 - 最终输出为包含三组姓名对象和一组Session对象的数组
输入JSON
[ { "policy": "Name", "PAFrstNm": "John" }, { "PALastNm": "Jammy", "policy": "Name" }, { "PAMiNm": "T", "policy": "Name" }, { "policy": "Name", "PPFrstNm": "sam" }, { "policy": "Name", "PPLastNm": "jim" }, { "policy": "Name", "PPMiNm": "E" }, { "policy": "Name", "PPFrstNm1": "jun" }, { "policy": "Other", "Summer": "533A" }, { "policy": "Other", "Winter": "588A" }, { "PPLastNm1": "san", "policy": "Name" }, { "PPMiNm1": "e", "policy": "Name" } ]
预期输出JSON
[ { "PAfullnam": "John T Jammy", "policy": "Name" }, { "PPfullnam": "sam E jim", "policy": "Name" }, { "PPfullnam1": "jun e san", "policy": "Name" }, { "Session": "533A 588A", "policy": "Other" } ]
现有Jolt规格问题分析
- 字段匹配正则
LastN|FrstN|MiN无法准确捕获完整字段名(如PALastNm里的LastNm) - 分组逻辑未按姓名前缀(
PA/PP/PP1)正确归类 - 拼接操作的路径和函数使用有误,未按指定顺序拼接姓名片段
Session字段的合并逻辑未正确关联policy为Other的条目
正确Jolt转换规格
[ // 第一步:按policy和姓名前缀分组,收集姓名片段和Other字段 { "operation": "shift", "spec": { "*": { "policy": "@1,policy.groupKey", // 处理Name组的姓名字段,提取前缀(PA/PP/PP1)和类型(FrstNm/MiNm/LastNm) "PAFrstNm": "Name.PA.frst", "PAMiNm": "Name.PA.mi", "PALastNm": "Name.PA.last", "PPFrstNm": "Name.PP.frst", "PPMiNm": "Name.PP.mi", "PPLastNm": "Name.PP.last", "PPFrstNm1": "Name.PP1.frst", "PPMiNm1": "Name.PP1.mi", "PPLastNm1": "Name.PP1.last", // 处理Other组的季节字段 "Summer": "Other.Summer", "Winter": "Other.Winter" } } }, // 第二步:拼接姓名片段为全名,合并Session字段 { "operation": "modify-overwrite-beta", "spec": { "Name": { "PA": "=join(' ', @(1,PA.frst), @(1,PA.mi), @(1,PA.last))", "PP": "=join(' ', @(1,PP.frst), @(1,PP.mi), @(1,PP.last))", "PP1": "=join(' ', @(1,PP1.frst), @(1,PP1.mi), @(1,PP1.last))" }, "Other": "=join(' ', @(1,Other.Summer), @(1,Other.Winter))" } }, // 第三步:转换为预期的数组结构,添加policy字段 { "operation": "shift", "spec": { "Name": { "PA": { "@": "[0].PAfullnam", "$2": "[0].policy" }, "PP": { "@": "[1].PPfullnam", "$2": "[1].policy" }, "PP1": { "@": "[2].PPfullnam1", "$2": "[2].policy" } }, "Other": { "@": "[3].Session", "$1": "[3].policy" } } }, // 第四步:清理空值(如果有的话) { "operation": "remove", "spec": { "*": { "null": "" } } } ]
规格说明
- Shift操作(第一步):将原始数组中的条目按
policy分组,同时把姓名字段按前缀拆分到对应子节点,方便后续拼接;Other组的季节字段单独收集。 - Modify操作(第二步):使用
join函数按指定顺序拼接姓名片段,合并Summer和Winter为Session值。 - Shift操作(第三步):将分组后的结构转换为预期的数组格式,为每个对象添加对应的
policy字段。 - Remove操作(第四步):清理转换过程中可能产生的空值(可选,确保输出整洁)。
内容的提问来源于stack exchange,提问作者Manimaran Dhandapani
相关产品推荐
相关产品推荐

