Jolt Transform如何合并含多同字段、2个异字段的JSON对象
Jolt Transform 同id对象合并转换规则
以下是可直接使用的完整Jolt配置:
[ // 按id分组,同id的各字段值收集为数组存储 { "operation": "shift", "spec": { "*": { "id": { "*": { "@2.name": "product_&1.name", "@2.category": "product_&1.category", "@2.id": "product_&1.id", "@2.price": "product_&1.price", "@2.color": "product_&1.color" } } } } }, // 提取固定字段的单值(同id的name、category、id值完全一致,取第一个元素即可) { "operation": "modify-overwrite-beta", "spec": { "*": { "name": "=firstElement(@(1,name))", "category": "=firstElement(@(1,category))", "id": "=toInteger(@(1,id[0]))" } } }, // 处理price、color字段:单元素数组压平为单值,多元素保留数组格式 { "operation": "modify-overwrite-beta", "spec": { "*": { "price": "=recursivelySquashLists", "color": "=recursivelySquashLists" } } } ]
转换效果说明
输入示例经过上述配置转换后,输出结果如下(注:你给出的输出示例存在语法错误,JSON数组不能包含键值对,正确结构外层为对象):
{ "product_1": { "name": "Product A", "category": "fruit", "id": 1, "price": [10,20], "color": ["green","yellow"] }, "product_2": { "name": "Product B", "category": "vegetable", "id": 2, "price": 30, "color": "blue" } }
规则拆解
- 第一步shift操作:遍历所有输入对象,以
id值为分组维度,将同id下所有字段的取值全部收集到对应的product_{id}节点下,多值自动转为数组存储。 - 第二步modify操作:
name、category、id三个字段同组取值完全相同,直接取数组第一个元素作为最终单值,同时将id转回整数类型。 - 第三步modify操作:使用
recursivelySquashLists函数处理price和color字段,自动判断数组长度:长度为1时直接返回元素本身,长度大于1时保留数组格式。
内容的提问来源于stack exchange,提问作者blinkadj
相关产品推荐
相关产品推荐

