如何使用JOLT按columnIndex值对数组元素进行分组
JOLT按columnIndex字段分组数据转换解决方案
需求
按columnIndex字段的值对temp_sfp数组中的元素分组,最终生成sfp_group数组,其中每个分组是一个对象,键为指定标识(columnIndex=1对应键"1",columnIndex=0对应键"2"),值为对应分组的元素数组。
输入数据
{ "temp_sfp": [ { "value": 600, "valueOperator": "=", "uom": "mcg", "name": "Vitamin D (as D3 Cholecalciferol)", "percentDvOperator": "=", "percentDv": "75.0", "columnIndex": 1 }, { "value": 2, "valueOperator": "=", "uom": null, "name": "Bacillus Coagulans", "percentDvOperator": "=", "percentDv": null, "columnIndex": 1 }, { "value": 300, "valueOperator": "=", "uom": "mcg", "name": "Vitamin D (as D3 Cholecalciferol)", "percentDvOperator": "=", "percentDv": "50.0", "columnIndex": 0 }, { "value": 1, "valueOperator": "=", "uom": "mg", "name": "Bacillus Coagulans", "percentDvOperator": "=", "percentDv": null, "columnIndex": 0 } ] }
期望输出
{ "sfp_group": [ { "1": [ { "value": 600, "valueOperator": "=", "uom": "mcg", "name": "Vitamin D (as D3 Cholecalciferol)", "percentDvOperator": "=", "percentDv": "75.0", "columnIndex": 1 }, { "value": 2, "valueOperator": "=", "uom": null, "name": "Bacillus Coagulans", "percentDvOperator": "=", "percentDv": null, "columnIndex": 1 } ] }, { "2": [ { "value": 300, "valueOperator": "=", "uom": "mcg", "name": "Vitamin D (as D3 Cholecalciferol)", "percentDvOperator": "=", "percentDv": "50.0", "columnIndex": 0 }, { "value": 1, "valueOperator": "=", "uom": "mg", "name": "Bacillus Coagulans", "percentDvOperator": "=", "percentDv": null, "columnIndex": 0 } ] } ] }
原规则问题分析
你之前尝试的Shift规则存在多层冗余嵌套,@4的回溯层级定位错误,既没有明确指定columnIndex到目标分组键的映射,也没有构建正确的外层数组结构,因此无法生成预期输出。
正确的JOLT转换规则
[ { "operation": "shift", "spec": { "temp_sfp": { "*": { "columnIndex": { "0": { "@2": "sfp_group[1].2[]" }, "1": { "@2": "sfp_group[0].1[]" } } } } } } ]
规则解释
- 遍历
temp_sfp数组的每个元素(*通配符匹配所有数组索引) - 针对每个元素的
columnIndex值,匹配对应的分支:- 当
columnIndex为0时,用@2回溯到当前元素的完整对象,将其添加到sfp_group[1].2数组中 - 当
columnIndex为1时,将元素添加到sfp_group[0].1数组中
- 当
- 最终生成的
sfp_group数组包含两个对象,分别对应两组数据,与期望输出结构完全一致。
内容的提问来源于stack exchange,提问作者Peter Massarello
相关产品推荐
相关产品推荐

