如何使用JOLT实现两个数组记录的笛卡尔积合并?
解决方案:JOLT实现数组笛卡尔积合并
正确的JOLT配置
[ { "operation": "shift", "spec": { "connections": { "*": { "@(2,tests)": { "*": { "*": "connections[&3_&1].&", "@(3,*)": "connections[&3_&1].&" } } } } } }, { "operation": "shift", "spec": { "connections": { "*": "connections[]" } } } ]
配置解释
第一步:生成笛卡尔积基础结构
- 外层遍历
connections数组的每条记录(*代表数组索引) - 通过
@(2,tests)引用上层的tests数组,再遍历tests的每条记录(内层*) - 对每个
connection-test组合:*": "connections[&3_&1].&:将当前test的所有字段映射到connection索引_test索引命名的键下,保留原字段名@(3,*)": "connections[&3_&1].&:将当前connection的所有字段同步映射到同一个键下,实现字段合并- 这一步会生成
connections["0_0"]、connections["0_1"]这类键值对,每个键对应一组connection-test的合并结果
第二步:整理为连续数组
- 遍历第一步生成的所有复合键(
*),将对应的值依次放入connections[] - JOLT会自动将这些值转换为连续的数组元素,得到最终的笛卡尔积结果
原配置失效原因
你之前的配置直接将整个tests数组赋值给每个connection,没有对tests的元素进行拆分遍历,因此无法生成一对一的组合记录。必须通过嵌套遍历两个数组的元素,才能实现笛卡尔积效果。
内容的提问来源于stack exchange,提问作者Robert Marro
相关产品推荐
相关产品推荐

