如何用JOLT按车主姓名合并JSON对象并将车辆转为数组?
JOLT实现同姓名车主合并及车辆字段数组化
完全可行,以下是具体实现思路和示例:
核心思路
- 分组聚合:先用
shift操作按车主姓名作为key,将同一车主的车辆信息聚合到对应分组下 - 字段数组化:通过
cardinality操作,确保车辆字段始终为数组类型(即使单辆车也转为数组) - 结构整理:最后用
shift操作把分组后的结构重新整理为数组格式
示例演示
输入JSON
[ {"name": "张三", "car": "奔驰C200"}, {"name": "李四", "car": "宝马3系"}, {"name": "张三", "car": "特斯拉Model 3"}, {"name": "王五", "car": "奥迪A4L"} ]
JOLT转换规范
[ // 第一步:按姓名分组,聚合车辆 { "operation": "shift", "spec": { "*": { "name": "@(1,name).name", "car": "@(1,name).cars[]" } } }, // 第二步:确保name字段为单值,cars字段为数组(避免单辆车时是字符串) { "operation": "cardinality", "spec": { "*": { "name": "ONE", "cars": "MANY" } } }, // 第三步:将分组后的对象转为数组 { "operation": "shift", "spec": { "*": "[]" } } ]
输出结果
[ { "name": "张三", "cars": ["奔驰C200", "特斯拉Model 3"] }, { "name": "李四", "cars": ["宝马3系"] }, { "name": "王五", "cars": ["奥迪A4L"] } ]
关键说明
- 第一步
shift中,@(1,name)表示取当前层级(数组元素层)的name值作为顶层key,实现分组 cardinality操作的ONE确保姓名不会变成数组,MANY强制车辆字段为数组,兼容单/多车场景- 最后一步把分组的对象转为数组,还原预期的数组结构
内容的提问来源于stack exchange,提问作者Shiv Anand
相关产品推荐
相关产品推荐

