如何在Jolt中添加BookingType条件控制TrackingAvailable字段显示
Jolt Spec 嵌套条件判断实现:仅特定BookingType且存在TrackingList时输出字段
需求说明
仅当输入中BookingType为3且存在TrackingList字段时,输出需包含"TrackingAvailable":"Y";其余场景(BookingType不为3,或无TrackingList)不显示该字段。当前已实现检测TrackingList的逻辑,但缺少BookingType的判断,需更新Jolt Spec实现双重条件校验。
示例输入
符合条件的输入(BookingType=3且有TrackingList)
{ "BookingType": 3, "TrackingList": [ { "TrackingNumber": "TRK123" } ], "OtherField": "value" }
不符合条件的输入1(BookingType≠3但有TrackingList)
{ "BookingType": 1, "TrackingList": [ { "TrackingNumber": "TRK456" } ], "OtherField": "value" }
不符合条件的输入2(BookingType=3但无TrackingList)
{ "BookingType": 3, "OtherField": "value" }
现有Jolt Spec(仅检测TrackingList)
[ { "operation": "modify-overwrite-beta", "spec": { "TrackingAvailable": "=notNull(@(1,TrackingList)) ? 'Y' : null" } }, { "operation": "remove", "spec": { "TrackingAvailable": "" } } ]
当前问题输出
对于上述不符合条件的输入1,现有Spec仍会输出"TrackingAvailable":"Y",不符合需求。
修正后的Jolt Spec
[ { "operation": "modify-overwrite-beta", "spec": { "TrackingAvailable": "=and(eq(@(1,BookingType),3), notNull(@(1,TrackingList))) ? 'Y' : null" } }, { "operation": "remove", "spec": { "TrackingAvailable": "" } } ]
逻辑解释
- modify-overwrite-beta 操作:
- 使用
and()函数组合两个判断条件:eq(@(1,BookingType),3):校验BookingType是否等于3notNull(@(1,TrackingList)):校验TrackingList是否存在且非空
- 仅当两个条件同时满足时,将
TrackingAvailable设为"Y";否则设为null
- 使用
- remove 操作:自动移除值为
null的TrackingAvailable字段,确保不符合条件时该字段不出现在输出中。
测试输出
符合条件的输入输出
{ "BookingType": 3, "TrackingList": [ { "TrackingNumber": "TRK123" } ], "OtherField": "value", "TrackingAvailable": "Y" }
不符合条件的输入1输出
{ "BookingType": 1, "TrackingList": [ { "TrackingNumber": "TRK456" } ], "OtherField": "value" }
不符合条件的输入2输出
{ "BookingType": 3, "OtherField": "value" }
内容的提问来源于stack exchange,提问作者Vikas Gonti
相关产品推荐
相关产品推荐

