如何用JOLT将对象数组转换为指定结构的对象数组?
JOLT数组拆分与动态键名处理方案
输入JSON
[ { "id": "1", "home_phone": [ "55555555", "66666666" ] }, { "id": "2", "home_phone": [ "77777777", "88888888" ] } ]
期望输出JSON
[ { "id": "1", "home": "55555555" }, { "id": "1", "home": "66666666" }, { "id": "2", "home_phone": "77777777" }, { "id": "2", "home_phone": "88888888" } ]
问题分析
原尝试的规则没实现根据id值动态切换键名的逻辑,而且拆分数组元素时,id和电话的关联方式错误,没法生成每个电话对应独立对象的结构。
解决方案
使用带条件分支的Shift操作,根据id的值动态指定键名,同时将每个home_phone元素与对应id绑定为独立对象:
[ { "operation": "shift", "spec": { "*": { "home_phone": { "*": { "@(2,id)": { "1": { "@": "[].home", "@(3,id)": "[].id" }, "2": { "@": "[].home_phone", "@(3,id)": "[].id" } } } } } } } ]
规则解释
- 第一层
*:逐个处理输入数组里的每个对象; home_phone下的*:逐个处理每个对象里的home_phone数组元素;@(2,id):获取当前元素往上两层的id值(即当前对象的id);"1"和"2"分支:根据id值分别指定键名,id为1时用home,id为2时用home_phone;@:指代当前正在处理的home_phone元素的值;@(3,id):获取最外层对象的id,绑定到新对象的id字段;[]:每处理一个电话就生成一个新的数组元素,确保每个电话对应独立对象。
内容的提问来源于stack exchange,提问作者ElielBerra
相关产品推荐
相关产品推荐

