请求编写Jolt转换规则实现指定JSON格式转换
Jolt转换规则实现求助
我提供的输入JSON如下:
{"user": {"firstName": "abc","lastName": "xyz","email": "xyz@abc.com"},"selections": [{"id": "123","person": "user","attributes": [{"attributeId": "AA","options": ["11"]},{"attributeId": "BB","options": ["22"]},{"attributeId": "CC","options": ["33"]}]}]}
期望得到的输出JSON为:
{"firstName": "User firstName","lastName": "User lastName","username": "concatenation of firstname and lastname","isActive": true,"valueofBB": "22","phone": "","CCLinkedToUser": [{"id": "33","default": true}]}
目前我只能通过以下Jolt规则转换前两个字段,无法获取BB、CC等属性的值,请求协助完成完整的Jolt转换规则:
[{"operation": "shift","spec": {"*": {"firstName": "firstName","lastName": "lastName","isActive": "true","email": "email","phone": "null"}}}]
完整Jolt转换规则
[ // 提取基础字段并按属性值分组属性数据 { "operation": "shift", "spec": { "user": { "firstName": "firstName", "lastName": "lastName" }, "selections": { "*": { "attributes": { "*": { "attributeId": "@(1,options[0]).&" } } } } } }, // 构造目标字段并映射属性值 { "operation": "shift", "spec": { "firstName": ["firstName", "username"], "lastName": "username", "@(0,firstName)": { "*": { "#User firstName": "firstName" } }, "@(0,lastName)": { "*": { "#User lastName": "lastName" } }, "22": { "BB": "valueofBB" }, "33": { "CC": { "#33": "CCLinkedToUser[0].id", "#true": "CCLinkedToUser[0].default" } }, "#true": "isActive", "#": "phone" } }, // 拼接用户名 { "operation": "modify-overwrite-beta", "spec": { "username": "=concat(@(1,username[0]),' ',@(1,username[1]))" } }, // 清理临时字段 { "operation": "remove", "spec": { "11": "", "22": "", "33": "" } } ]
规则说明
- 第一步Shift:提取用户的姓名字段,同时把
attributes里的属性按对应options值分组,为后续映射做准备。 - 第二步Shift:
- 将姓名字段同时映射到
username数组,用于拼接; - 替换姓名原始值为期望的固定文本;
- 匹配BB对应的选项值"22",映射到
valueofBB; - 匹配CC对应的选项值"33",构造
CCLinkedToUser数组对象; - 直接设置
isActive为true、phone为空字符串。
- 将姓名字段同时映射到
- Modify操作:用
concat函数拼接username数组里的姓名,生成最终用户名。 - Remove操作:删除第一步生成的临时分组字段,保证输出结构干净。
内容的提问来源于stack exchange,提问作者Rangareddy Yenimireddy
相关产品推荐
相关产品推荐

