如何通过Jolt转换基于地址属性生成含固定值的地址列表?
问题解决:调整Jolt配置实现目标地址列表转换
问题分析
现有Jolt配置存在两大缺陷:
- 仅当
officeAddress字段存在时才会生成couries项,若该字段为空、null或完全缺失,对应的地址项会被直接忽略 isPrimary字段仅在officeAddress等于P时才会添加,其他场景下目标输出会缺失该字段
修正后的Jolt配置
通过两步转换可覆盖所有场景,逻辑简洁清晰:
[ // 第一步:处理officeAddress的缺失/空值情况,设置默认值 { "operation": "modify-overwrite-beta", "spec": { "address": { "*": { // 若officeAddress不存在、为空或null,默认设为"N" "officeAddress": ["@(1,officeAddress)", "N"] } } } }, // 第二步:映射字段并根据officeAddress的值设置homeAddress { "operation": "shift", "spec": { "address": { "*": { // 统一映射soldAddress和硬编码的isPrimary "soldAddress": "couries[#1].delivery.soldAddress", "#true": "couries[#1].delivery.isPrimary", // 根据officeAddress的值分支设置homeAddress "officeAddress": { "P": { "#Home": "couries[#1].delivery.homeAddress" }, // 匹配所有非P的情况(包括默认的N) "*": { "#Office": "couries[#1].delivery.homeAddress" } } } } } } ]
配置说明
modify-overwrite-beta操作:
- 遍历
address数组中的每一项,对officeAddress字段做默认值兜底处理 - 使用
["@(1,officeAddress)", "N"]语法:如果原字段存在且不为空/null,保留原值;否则用"N"填充,确保后续shift转换能统一处理所有情况
- 遍历
shift操作:
- 把
soldAddress直接映射到目标路径,确保每个地址项都携带该字段 - 硬编码
isPrimary为"true",统一添加到所有delivery对象中 - 根据
officeAddress的值分支判断:等于"P"时设置homeAddress为"Home",其他情况(包括默认的"N")设置为"Office"
- 把
测试验证
将示例输入代入上述配置,可精准得到期望输出:
{ "couries": [ { "delivery": { "homeAddress": "Home", "isPrimary": "true", "soldAddress": "N" } }, { "delivery": { "homeAddress": "Office", "isPrimary": "true", "soldAddress": "P" } } ] }
内容的提问来源于stack exchange,提问作者Rakesh GR
相关产品推荐
相关产品推荐

