求符合条件的Jolt转换规格:同时输出date与type字段
Jolt 转换解决方案
需求回顾
- 仅保留指定字段:
date、type、isRolling,统一放在releaseSettings节点下 - 按规则填充
type字段:- 当
inventory.release.date不为空时,type设为ReleaseDate - 当
date不存在,且inventory.release.days不为空或不等于0时,type设为PriorToArrival
- 当
- 需同时输出
date和type字段
完整 Jolt 转换规格
[ { "operation": "shift", "spec": { "inventory": { "release": { "date": "releaseSettings.date", "isRolling": "releaseSettings.isRolling", "days": "releaseSettings.days", "@date": "tempDate" } } } }, { "operation": "modify-default-beta", "spec": { "releaseSettings": { "type": [ "=cond(@(1,tempDate), 'ReleaseDate', '')", "=cond(and(not(@(1,tempDate)), or(notNull(@(1,days)), neq(@(1,days),0))), 'PriorToArrival', @(1))" ] } } }, { "operation": "shift", "spec": { "releaseSettings": { "date": "releaseSettings.date", "type": "releaseSettings.type", "isRolling": "releaseSettings.isRolling" } } } ]
转换逻辑说明
- 第一步 Shift:把需要保留的字段(
date、isRolling)移到releaseSettings下,同时暂存days和date用于后续条件判断 - 第二步 Modify:通过
cond函数实现双条件判断,依次赋值type:- 优先判断
date是否存在,存在则设为ReleaseDate - 若
date不存在,再判断days是否非空或非0,满足则设为PriorToArrival
- 优先判断
- 第三步 Shift:清理临时字段(
days、tempDate),只保留最终需要的字段
测试验证
测试用例1:存在非空date
输入JSON:
{ "inventory": { "release": { "date": "2025-01-16", "days": 0, "isRolling": true, "value": "4gh", "computationType": "Flat" } } }
输出JSON:
{ "releaseSettings": { "date": "2025-01-16", "type": "ReleaseDate", "isRolling": true } }
测试用例2:date不存在,days非0
输入JSON:
{ "inventory": { "release": { "days": 7, "isRolling": false, "value": "abc", "computationType": "Dynamic" } } }
输出JSON:
{ "releaseSettings": { "type": "PriorToArrival", "isRolling": false } }
内容的提问来源于stack exchange,提问作者Optimizer
相关产品推荐
相关产品推荐

