请求实现从用户设备数组到一对多结构的Jolt转换
Jolt转换规则:用户与设备一对多结构聚合
输入JSON
{ "q": [ { "UserId": "3000", "SiteId": "website1", "CreateDate": "2022-04-01T08:26:21.401Z", "DevideId": "ddd1111", "TokenId": "abcd1234" }, { "UserId": "3000", "SiteId": "website1", "CreateDate": "2022-04-01T08:26:21.401Z", "DevideId": "ddd2222", "TokenId": "wxyz1234" }, { "UserId": "3002", "SiteId": "website1", "CreateDate": "2022-04-01T08:26:21.401Z", "DevideId": "ddd333", "TokenId": "wxyz1234" } ] }
期望输出JSON
[ { "CreateDate": "2022-04-01T08:26:21.401Z", "UserId": "3000", "devices": [ { "DevideId": "ddd1111", "SiteId": "website1", "TokenId": "abcd1234" }, { "DevideId": "ddd2222", "SiteId": "website1", "TokenId": "wxyz1234" } ] }, { "CreateDate": "2022-04-01T08:26:21.401Z", "UserId": "3002", "devices": [ { "DevideId": "ddd333", "SiteId": "website1", "TokenId": "wxyz1234" } ] } ]
Jolt转换规则
[ { "operation": "shift", "spec": { "q": { "*": { "UserId": "@1,UserId.&", "CreateDate": "@1,UserId.&", "DevideId": "@1,UserId.devices[#2].&", "SiteId": "@1,UserId.devices[#2].&", "TokenId": "@1,UserId.devices[#2].&" } } } }, { "operation": "shift", "spec": { "*": { "UserId": "[#2].UserId", "CreateDate": "[#2].CreateDate", "devices": "[#2].devices" } } } ]
规则说明
- 第一个shift操作:以
UserId作为分组标识,将用户公共字段(UserId、CreateDate)和设备专属字段分别归类,设备字段会被存入devices数组,#2对应原数组的索引,保证同一用户的多个设备按顺序存入数组。 - 第二个shift操作:把第一步生成的以用户ID为键的对象结构,转换为目标数组格式,保留用户公共字段和对应的设备数组,完成一对多结构的聚合。
内容的提问来源于stack exchange,提问作者Teegen
相关产品推荐
相关产品推荐

