编写Jolt转换规则:处理数组空值生成finalFee字段
Jolt转换规则修改方案
业务场景
- 场景1:当fee1有值且fee2为空字符串时,finalFee取fee1的值
- 场景2:当fee1为空字符串且fee2有值时,finalFee取fee2的值
- 场景3:当fee1和fee2均有值时,finalFee取fee1的值
输入JSON
{ "school": [ { "schoolCode": ["SH","MA","KR"], "fee1": [3,"",5], "fee2": ["",10,15] } ] }
预期输出JSON
{ "school": [ { "schoolCode": "SH", "finalFee": 3 }, { "schoolCode": "MA", "finalFee": 10 }, { "schoolCode": "KR", "finalFee": 5 } ] }
修改后的Jolt转换规则
[ // 第一步:将数组元素一一对应,生成包含schoolCode、fee1、fee2的单个对象 { "operation": "shift", "spec": { "school": { "*": { "schoolCode": { "*": { "@": "school.[&1].schoolCode", "../../fee1[&1]": "school.[&1].fee1", "../../fee2[&1]": "school.[&1].fee2" } } } } } }, // 第二步:根据业务规则计算finalFee,优先取fee1,fee1为空则取fee2 { "operation": "modify-overwrite-beta", "spec": { "school": { "*": { "finalFee": "=ifEmpty(@(1,fee1), @(1,fee2))" } } } }, // 第三步:移除不需要的fee1、fee2字段,保留目标结构 { "operation": "shift", "spec": { "school": { "*": { "schoolCode": "school.[&1].schoolCode", "finalFee": "school.[&1].finalFee" } } } } ]
规则说明
- Shift操作(第一步):遍历
school数组内的对象,将schoolCode、fee1、fee2数组的对应索引元素映射到同一个子对象中,确保每个学校的三个字段一一匹配。 - Modify操作(第二步):使用
ifEmpty函数判断fee1是否为空,若为空则取fee2的值,否则保留fee1的值,赋值给finalFee,完全匹配业务场景要求。 - Shift操作(第三步):仅保留
schoolCode和finalFee字段,移除临时生成的fee1、fee2,得到预期的输出结构。
内容的提问来源于stack exchange,提问作者shobika
相关产品推荐
相关产品推荐

