如何使用JOLT实现数组元素与另一完整数组的分组转换?
需求与JOLT解决方案
输入JSON
[ { "objects": ["obj1","obj2","obj3","obj4","obj5"] }, { "types": ["kpi1","kpi2","kpi3","kpi4"] } ]
目标输出JSON
{ "new":[ { "obj":"obj1","types": ["kpi1","kpi2","kpi3","kpi4"] }, { "obj":"obj2","types": ["kpi1","kpi2","kpi3","kpi4"] }, { "obj":"obj3","types": ["kpi1","kpi2","kpi3","kpi4"] }, { "obj":"obj4","types": ["kpi1","kpi2","kpi3","kpi4"] }, { "obj":"obj5","types": ["kpi1","kpi2","kpi3","kpi4"] } ] }
原错误JOLT规格及输出
错误JOLT
{ "operation": "shift", "spec": { "*": { "objects": { "*": "new[].obj" }, "types": { "@": "new[].&" } } } }
错误输出
{ "new" : [ { "obj" : "obj1" }, { "obj" : "obj2" }, { "obj" : "obj3" }, { "obj" : "obj4" }, { "obj" : "obj5" }, { "types" : [ "kpi1", "kpi2", "kpi3", "kpi4" ] } ] }
正确JOLT转换方案
[ { "operation": "shift", "spec": { "0": { "objects": { "*": { "@": "new[&1].obj", "@(2,1.types)": "new[&1].types" } } } } } ]
方案说明
- 通过
shift操作定位到输入数组中包含objects的第一个元素(索引为0) - 遍历
objects数组时,用&1获取当前元素的索引,保证每个obj对应new数组的同一位置 - 利用路径引用
@(2,1.types),从当前位置向上跳转2层到根数组,取出第二个元素(索引为1)的types数组,将其赋值给当前new数组位置的types字段,实现每个对象都携带完整的types数组
内容的提问来源于stack exchange,提问作者Theodoros
相关产品推荐
相关产品推荐

