JOLT Shift转换求助:多层Item提取与属性整理结果异常
JOLT Shift转换方案:提取嵌套item的独立属性数组
你当前的spec使用相对索引([&1]、[&2])时,不同层级的item会命中同一个数组位置,导致多个item的ac和nn被合并到同一个对象中。解决思路是先递归收集所有层级的item到一个数组,再提取每个item的目标字段,确保每个item对应独立的数组元素。
正确的JOLT转换Spec
[ // 第一步:递归收集所有层级的item到数组,先处理子item再处理父item,保证顺序符合预期 { "operation": "shift", "spec": { "item": { "*": { // 优先处理嵌套的子item "item": { "*": { "@": "[]", // 递归处理更深层级的item "item": "&2" } }, // 再处理当前层级的item "@": "[]" } } } }, // 第二步:提取每个item中的ac和foo.nn字段 { "operation": "shift", "spec": { "*": { "ac": "[&1].ac", "foo": { "nn": "[&2].foo.nn" } } } } ]
方案说明
- 第一步Shift操作:
- 递归遍历所有嵌套的
item数组,先处理子级item再处理父级item,确保输出顺序匹配你的预期 - 使用
"@": "[]"将每个item对象追加到数组中,&2表示递归调用当前item的处理逻辑,支持任意深度的嵌套item
- 递归遍历所有嵌套的
- 第二步Shift操作:
- 遍历第一步生成的数组,提取每个元素的
ac字段,以及foo下的nn字段,组装成目标结构
- 遍历第一步生成的数组,提取每个元素的
验证结果
该Spec会生成与你预期完全一致的输出,每个item的属性独立成为数组中的一个元素,不会出现字段合并的问题。
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

