Jolt规则编写问题:拆分字符串为CA、C0开头的两个数组
Jolt规格修正:拆分并分类smartCode-ids字符串
输入数据
{"smartCode-ids": "CA_2629,CA_2621,CA_1691,C0_2628,C0_2621,C0_1691"}
当前错误的Jolt规格
[ { "operation": "modify-overwrite-beta", "spec": { "smartCode-ids": "=split(',',@(1,smartCode-ids))" } }, { "operation": "shift", "spec": { "*": { "smartCode-ids": { "CA*": { "@(2,smartCode-ids)": "CA[]" } }, "C0*": { "@(2,smartCode-ids)": "C0[]" } } } } ]
预期输出
{"CA":["CA_2629","CA_2621","CA_1691"],"C0":["C0_2628","C0_2621","C0_1691"]}
问题分析与修正后的Jolt规格
原shift操作的层级结构错误,且引用值的方式不对,导致返回null。修正后的规格如下:
[ { "operation": "modify-overwrite-beta", "spec": { "smartCode-ids": "=split(',',@(1,smartCode-ids))" } }, { "operation": "shift", "spec": { "smartCode-ids": { "*": { "CA*": { "@": "CA[]" }, "C0*": { "@": "C0[]" } } } } } ]
解释
- modify-overwrite-beta:这一步逻辑正确,成功将逗号分隔的字符串拆分为数组。
- shift:
- 直接定位到
smartCode-ids数组,用*遍历数组中的每个元素。 - 对每个元素,判断前缀:以
CA开头的,用@引用当前元素的值,将其加入CA数组;以C0开头的同理加入C0数组。 - 移除了原规格中多余的外层
*,避免层级匹配错误。
- 直接定位到
内容的提问来源于stack exchange,提问作者Raj Gandhal
相关产品推荐
相关产品推荐

