如何编写JOLT规则实现F1非空优先、F2兜底的result输出?
JOLT实现非空优先取值逻辑
针对你的需求(F1非空则取F1到result,F1为null则取F2到result),可以使用JOLT的shift操作结合条件匹配来实现,具体规范如下:
[ { "operation": "shift", "spec": { "F1": { "null": { "@(2,F2)": "result" }, "*": { "@": "result" } } } } ]
逻辑说明
- 对
F1字段做分支判断:- 当
F1的值为null时,通过@(2,F2)获取根节点下的F2值,赋值给result;@(2)表示向上回溯两层路径(当前处于F1 -> null分支,回溯两层回到根节点) - 当
F1为任意非null值时,用*匹配所有非空值,直接将F1的值赋值给result
- 当
验证不同输入场景
场景1:F1非空输入
{ "F1": "1", "F2": "2" }
转换输出:
{ "result": "1" }
场景2:F1为null输入
{ "F1": null, "F2": "2" }
转换输出:
{ "result": "2" }
扩展:处理F1不存在的情况
如果需要同时兼容F1字段不存在的场景(此时也取F2的值),可以调整规范为:
[ { "operation": "shift", "spec": { "F1": { "null": { "@(2,F2)": "result" }, "*": { "@": "result" } }, // 当F1不存在时,直接取F2的值 "F2": { "*": { "@": "result" } } } } ]
注:shift操作中,若F1存在则优先匹配F1的分支,只有F1不存在时才会触发F2的分支赋值。
内容的提问来源于stack exchange,提问作者Rajashekar I
相关产品推荐
相关产品推荐

