如何修改Jolt转换规范实现循环迭代以生成目标JSON输出?
Jolt转换问题解决方案
问题描述
我有如下输入JSON:
{ "a": [ [ "a1" ], [ "a2" ] ], "b": [ [ "b1", "b2" ], [ "b3", "b4" ] ] }
期望通过Jolt转换得到如下输出JSON:
[ { "a": "a1", "b": "b1" }, { "a": "a1", "b": "b2" }, { "a": "a2", "b": "b3" }, { "a": "a2", "b": "b4" } ]
尝试结合shift和cardinality操作编写了如下转换规范,但无法正确实现循环迭代:
[ { "operation": "shift", "spec": { "*": "&" } }, { "operation": "shift", "spec": { "*": { "*": "[&].&1" } } }, { "operation": "cardinality", "spec": { "*": { "*": "ONE" } } } ]
请问需要如何修改该Jolt转换规范以达成需求?
修改后的Jolt转换规范
直接调整shift操作的层级关联逻辑,即可生成目标输出,无需额外cardinality操作:
[ { "operation": "shift", "spec": { "a": { "*": { "*": { "@(3,b[&1][*])": { "$(3,1)": "[#2].a", "@": "[#2].b" } } } } } } ]
逻辑说明
- 先遍历
a数组的每个子数组(索引&1对应0、1),再取子数组内的元素(a1、a2) - 通过
@(3,b[&1][*])关联b数组中对应索引的子数组所有元素,比如a的第0个索引对应b的[b1,b2],第1个索引对应[b3,b4] $(3,1)获取当前a的元素值,赋值给结果对象的a字段;@获取当前遍历的b元素值,赋值给b字段[#2]自动生成连续的数组索引,让每个a与对应b子数组元素的组合都成为数组中的独立对象
内容的提问来源于stack exchange,提问作者tl98513
相关产品推荐
相关产品推荐

