如何通过JOLT转换为缺失acceptId的对象分配acceptIds值?
JOLT转换实现缺失acceptId字段的填充需求
问题描述
需要通过JOLT转换处理JSON数据,满足以下要求:
- 数据源包含
acceptIds数组和phoneNumbers对象数组 - 仅为
phoneNumbers中包含accept对象但缺失acceptId字段的条目,按顺序分配acceptIds中的值 - 保留原有数据的其他结构,无accept对象的条目保持不变
acceptIds的元素数量与缺失acceptId的accept对象数量完全匹配
示例输入
{ "acceptIds": [ "23" ], "phoneNumbers": [ { "phoneNumber": "123", "accept": { "acceptId": "1", "acceptName": "phone" } }, { "phoneNumber": "456" }, { "phoneNumber": "789", "accept": { "acceptName": "phone" } } ] }
预期输出
{ "phoneNumbers": [ { "phoneNumber": "123", "accept": { "acceptId": "1", "acceptName": "phone" } }, { "phoneNumber": "456" }, { "phoneNumber": "789", "accept": { "acceptId": "23", "acceptName": "phone" } } ] }
JOLT转换规则
[ { "operation": "shift", "spec": { "phoneNumbers": { "*": { "@": "phoneNumbers[&1]", "accept": { "acceptId": { "*": { "@(2,accept)": "phoneNumbers[&3].accept" } }, "*": { "@(1)": "phoneNumbers[&3].accept", "#true": "needsFill[&3]" } } } }, "acceptIds": "acceptIds" } }, { "operation": "shift", "spec": { "phoneNumbers": { "*": { "needsFill": { "true": { "@(3,acceptIds[#2])": "phoneNumbers[&3].accept.acceptId", "@(2,accept)": "phoneNumbers[&3].accept" }, "*": { "@(2)": "phoneNumbers[&3]" } }, "*": { "@(1)": "phoneNumbers[&2].&" } } } } }, { "operation": "remove", "spec": { "needsFill": "", "acceptIds": "" } } ]
规则说明
- 第一步(shift操作):
- 保留
phoneNumbers的所有原始结构 - 为缺失
acceptId的accept对象添加needsFill标记,同时保留已有acceptId的对象结构 - 暂存
acceptIds数组用于后续填充
- 保留
- 第二步(shift操作):
- 遍历
phoneNumbers,对带有needsFill=true的条目,按顺序从acceptIds中取出对应ID填充到accept.acceptId字段 - 无标记或已有
acceptId的条目直接保留原有数据
- 遍历
- 第三步(remove操作):清理临时生成的
needsFill标记和原acceptIds数组,得到最终结构
内容的提问来源于stack exchange,提问作者Madhavi kurabalakota
相关产品推荐
相关产品推荐

