JOLT复杂数组转换问题求助及数组变换教程需求
修正JOLT规格以正确生成嵌套数组
我来帮你解决这个JOLT数组转换的问题,顺便梳理下数组变换的核心要点~
你遇到的核心问题是:INVBALANCES里的user和CURBAL被拆到了不同对象中,这是因为外层数组索引的层级引用错误。下面是修正后的JOLT规格:
[ { "operation": "shift", "spec": { "data": { "ARINVT01": { "*": { "firstName": "[&1].FNAME", "lastname": "[&1].LNAME", "INVLOC": { "data": { "*": { "mmm": "[&3].INVBALANCES.[&1].user", "nnn": "[&3].INVBALANCES.[&1].CURBAL" } } } } } } } } ]
关键调整说明:
原来的[&1]指向的是INVLOC层级(data的父对象),完全偏离了目标——我们需要定位到最外层ARINVT01数组里的用户对象索引。从mmm所在层级往上数,第3层才是ARINVT01的数组元素(*),所以用[&3]锁定外层用户对象;而[&1]是当前INVLOC.data数组的元素索引,这样就能把同一个data元素里的mmm和nnn映射到INVBALANCES的同一个对象中了。
测试这个规格后,就能得到你期望的输出结果。
JOLT数组变换核心教程要点
整理几个实用的数组变换技巧,帮你快速上手:
- 精准引用上层数组索引:用
&n指定往上数的层级(当前层级为&0)。处理多层嵌套数组时,一定要数清楚目标层级的位置,避免引用错误导致字段分散。 - 当前数组索引的使用:用
[#]引用当前元素在数组中的索引(从0开始计数),常用于将内层数组元素映射到外层嵌套数组的对应位置;如果要往数组末尾追加元素,直接用[]即可(JOLT会自动按顺序填充)。 - 嵌套数组的构造:确保内层数组的所有字段都指向同一个目标数组索引,这是避免字段拆分到不同对象的核心。
- 遍历数组元素:用
*通配符可以遍历数组里的所有元素,不管数组长度如何,都能统一处理每个元素的字段映射。 - 处理空数组/缺失数组:如果担心输入中缺少
INVLOC.data这类数组,可以在shift操作后添加default操作,给INVBALANCES设置默认空数组[],避免输出中缺失该字段。
内容的提问来源于stack exchange,提问作者Pratik Jaiswal
相关产品推荐
相关产品推荐

