如何使用Jolt将字符串数组每4个元素转为对象数组?
Jolt实现数组按每4元素分组转为对象数组
这个需求完全可以通过Jolt实现,核心是利用shift操作结合数组索引的数学运算(整除、取模)来完成分组和字段映射。
输入数据
{ "test": [ 1, 2, 3, 4, 5, 6, 7, 8 ] }
Jolt转换规则
[ // 第一步:将原数组元素按索引暂存到temp对象中 { "operation": "shift", "spec": { "test": { "*": { "@(1,[])": { "$": "temp.&(0,1)" } } } } }, // 第二步:按索引每4个元素为一组,分组到group对象中 { "operation": "shift", "spec": { "temp": { "*": { "$": "group.${divide(#,4)}.&(0,mod(#,4))" } } } }, // 第三步:将组内的0/1/2/3索引映射为a/b/c/d字段 { "operation": "shift", "spec": { "group": { "*": { "0": "&1.a", "1": "&1.b", "2": "&1.c", "3": "&1.d" } } } }, // 第四步:将group对象转为数组输出 { "operation": "shift", "spec": { "group": { "*": "" } } } ]
规则解释
- 第一步:遍历
test数组的每个元素,把元素值按原数组索引存储到temp对象中,比如temp.0=1、temp.1=2。 - 第二步:遍历
temp的每个索引键,用divide(#,4)计算该元素所属的组(索引0-3对应组0,4-7对应组1),用mod(#,4)计算组内位置(0/1/2/3),把元素分配到group的对应组和位置里,比如group.0.0=1、group.1.0=5。 - 第三步:把每组内的
0、1、2、3位置分别映射为a、b、c、d字段,得到group.0={"a":1,"b":2,...}的结构。 - 第四步:提取
group对象的所有值,转为数组,得到最终结果。
转换后输出
[ { "a": 1, "b": 2, "c": 3, "d": 4 }, { "a": 5, "b": 6, "c": 7, "d": 8 } ]
内容的提问来源于stack exchange,提问作者vkatsou
相关产品推荐
相关产品推荐

