请求编写Jolt转换Spec:仅处理user对象的manager字段
Jolt转换Spec实现:仅修改user类型对象的manager属性
需求说明
处理JSON数组时,仅对type为user的对象做如下修改:
- 将原
manager字段下的value与position字段拼接,存入新字段managerRef.info - 删除原
manager字段type为account的对象保持原样。
输入示例
[ { "type": "user", "name": "Alice", "manager": { "value": "Bob", "position": "Engineering Lead" } }, { "type": "account", "accountId": "ACC-123", "balance": 5000 }, { "type": "user", "name": "Charlie", "manager": { "value": "David", "position": "Product Director" } } ]
期望输出示例
[ { "type": "user", "name": "Alice", "managerRef": { "info": "Bob (Engineering Lead)" } }, { "type": "account", "accountId": "ACC-123", "balance": 5000 }, { "type": "user", "name": "Charlie", "managerRef": { "info": "David (Product Director)" } } ]
Jolt转换Spec
[ { "operation": "shift", "spec": { "*": { "type": { "user": { "@(2,name)": "[&3].name", "@(2,type)": "[&3].type", "@(2,manager.value)": "[&3].managerRef.info", "@(2,manager.position)": "[&3].managerRef.info_append" }, "*": { "@(2)": "[&3]" } } } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { "managerRef": { "info": "=concat(@(1,info), ' (', @(1,info_append), ')')" } } } }, { "operation": "remove", "spec": { "*": { "managerRef": { "info_append": "" } } } } ]
转换逻辑解释
- Shift操作:
- 遍历数组中的每个元素,根据
type字段分支处理 - 对于
user类型:提取name、type,分别将manager.value和manager.position存入managerRef.info和managerRef.info_append(临时字段) - 对于其他类型(这里是
account):直接保留原对象的所有字段
- 遍历数组中的每个元素,根据
- Modify操作:
- 对
user类型对象的managerRef.info进行拼接,将info和info_append格式化为"value (position)"的形式
- 对
- Remove操作:
- 删除临时字段
info_append,清理结果结构
- 删除临时字段
内容的提问来源于stack exchange,提问作者ayan_2587
相关产品推荐
相关产品推荐

