基于条件向数组添加元素:ID与ultimateId的输出规则调整需求
问题:根据ultimateId和ID的存在情况生成对应输出列表
需求规则
- 若输入同时存在
ultimateId和ID,仅将ultimateId对应的对象加入输出列表 - 若输入仅存在
ID而无ultimateId,则将ID对应的对象加入输出列表
当前输入示例
{ "accountType": "CUSTOMER", "AccountInfo": { "ultimateId": "DF6ECC32", "id": "DJKWNA" }, "AccountAddresses": [ { "modId": "Al-Jazeera", "businessAddressEndDateTime": "2020-07-01T00:00:00.00Z" } ], "PartyDetails": { "domesticUltimateDunsPostalCode": "94115", "subIndustryCode": "1232" } }
当前转换规则(SPECS)
[ { "operation": "shift", "spec": { "AccountInfo": { "id": { "@2,partyAltIdResellerUidSrcKey": "PartyAlternateId.item[#2].key.sourceKey", "@1,resellerUId": "PartyAlternateId.item[#2].AltIdVal", "@2,created": "PartyAlternateId.item[#2].EffStrtDt", "#ID": "PartyAlternateId.item[#2].AltIdType.idTypDesc", "#0004": "PartyAlternateId.item[#2].AltIdType.idTyp" }, "ultimateId": { "@2,partyAltIdUltimateResellerUidSrcKey": "PartyAlternateId.item[#2].key.sourceKey", "@1,resellerUltimateSalesLegacySourceId": "PartyAlternateId.item[#2].AltIdVal", "@2,created": "PartyAlternateId.item[#2].EffStrtDt", "#Ultimate ID": "PartyAlternateId.item[#2].AltIdType.idTypDesc", "#0018": "PartyAlternateId.item[#2].AltIdType.idTyp" } } } } ]
当前转换输出结果
{ "PartyAlternateId": { "item": [ { "AltIdType": { "idTypDesc": "ID", "idTyp": "0004" } }, { "AltIdType": { "idTypDesc": "Ultimate ID", "idTyp": "0018" } } ] } }
期望输出
当输入同时存在ID和ultimateId时:
{ "PartyAlternateId": { "item": [ { "AltIdType": { "idTypDesc": "Ultimate ID", "idTyp": "0018" } } ] } }
当输入仅存在ID而无ultimateId时:
{ "PartyAlternateId": { "item": [ { "AltIdType": { "idTypDesc": "ID", "idTyp": "0004" } } ] } }
调整后的转换规则
[ { "operation": "shift", "spec": { "AccountInfo": { "ultimateId": { "@2,partyAltIdUltimateResellerUidSrcKey": "PartyAlternateId.item[0].key.sourceKey", "@1,resellerUltimateSalesLegacySourceId": "PartyAlternateId.item[0].AltIdVal", "@2,created": "PartyAlternateId.item[0].EffStrtDt", "#Ultimate ID": "PartyAlternateId.item[0].AltIdType.idTypDesc", "#0018": "PartyAlternateId.item[0].AltIdType.idTyp" }, "id": { "@2,ultimateId": { "*": null }, "$": { "@2,partyAltIdResellerUidSrcKey": "PartyAlternateId.item[0].key.sourceKey", "@1,resellerUId": "PartyAlternateId.item[0].AltIdVal", "@2,created": "PartyAlternateId.item[0].EffStrtDt", "#ID": "PartyAlternateId.item[0].AltIdType.idTypDesc", "#0004": "PartyAlternateId.item[0].AltIdType.idTyp" } } } } }, { "operation": "remove", "spec": { "PartyAlternateId": { "item": { "*": { "key": { "sourceKey": { "null": "" } }, "AltIdVal": { "null": "" }, "EffStrtDt": { "null": "" } } } } } } ]
规则说明
- 优先处理ultimateId:直接对
ultimateId执行转换逻辑,输出到item[0]位置 - 条件判断处理id:通过
@2,ultimateId检查上级节点中ultimateId是否存在:- 若存在,将
id对应的转换结果设为null,忽略该字段 - 若不存在,执行
id的转换逻辑,同样输出到item[0]位置
- 若存在,将
- 清理空节点:添加
remove操作,移除因条件判断产生的null属性,保证输出结构整洁
内容的提问来源于stack exchange,提问作者Madhavi kurabalakota
相关产品推荐
相关产品推荐

