基于JOLT实现JSON数组按LocationX/Y分组及字段映射需求
JOLT分组及字段映射解决方案
输入JSON示例
{ "StartTime": "2024-05-20T10:00:00", "SessionData": [ { "LocationX": "A", "LocationY": "1", "distance_3": 12.5, "distance_4": 8.3 }, { "LocationX": "A", "LocationY": "1", "distance_3": 13.1, "distance_4": 7.9 }, { "LocationX": "B", "LocationY": "2", "distance_3": 9.7, "distance_4": 10.2 } ] }
JOLT转换配置
[ // 分组+字段重命名+保留StartTime { "operation": "shift", "spec": { "StartTime": "StartTime", "SessionData": { "*": { "LocationX": "grouped.&1.LocationX", "LocationY": "grouped.&1.LocationY", "distance_3": "grouped.&1.X_Z_distance", "distance_4": "grouped.&1.Y_Z_distance" } } } }, // 为每个分组对象注入StartTime { "operation": "shift", "spec": { "StartTime": "*StartTime", "grouped": { "*": { "@(2,StartTime)": "&1.StartTime", "*": "&1.&" } } } }, // 将分组结构转为数组 { "operation": "shift", "spec": { "*": { "*": "[]" } } }, // 添加默认字段Rod:"S" { "operation": "default", "spec": { "*": { "Rod": "S" } } } ]
输出JSON示例
[ { "LocationX": "A", "LocationY": "1", "X_Z_distance": 12.5, "Y_Z_distance": 8.3, "StartTime": "2024-05-20T10:00:00", "Rod": "S" }, { "LocationX": "A", "LocationY": "1", "X_Z_distance": 13.1, "Y_Z_distance": 7.9, "StartTime": "2024-05-20T10:00:00", "Rod": "S" }, { "LocationX": "B", "LocationY": "2", "X_Z_distance": 9.7, "Y_Z_distance": 10.2, "StartTime": "2024-05-20T10:00:00", "Rod": "S" } ]
配置说明
- 第一个
shift操作:保留顶层StartTime,遍历SessionData数组时将每个元素按原索引存入grouped结构,同时完成distance_3→X_Z_distance、distance_4→Y_Z_distance的字段映射。 - 第二个
shift操作:通过@(2,StartTime)将顶层StartTime值注入到每个分组对象中,确保每个对象都携带该字段。 - 第三个
shift操作:把grouped下的键值对转换为数组元素,形成最终的数组输出结构。 default操作:为数组内每个对象添加默认字段Rod: "S"。
内容的提问来源于stack exchange,提问作者casper
相关产品推荐
相关产品推荐

