如何用Jolt将单个JSON对象按属性转换为对象数组?
Jolt动态转换:将对象转为含重复ID的单属性对象数组
问题背景
需要将单个JSON对象转换为数组,数组长度等于原对象属性数,每个数组元素仅包含原对象的一个属性,同时统一携带原对象的id作为repeatedId字段。
输入JSON
{ "id": "00abc", "attribute1": 100, "attribute2": "yes", "attribute3": false, "attribute4": "up" }
期望输出
{ "array" : [ { "id" : "00abc", "repeatedId" : "00abc" }, { "attribute1" : 100, "repeatedId" : "00abc" }, { "attribute2" : "yes", "repeatedId" : "00abc" }, { "attribute3" : false, "repeatedId" : "00abc" }, { "attribute4" : "up", "repeatedId" : "00abc" } ] }
原Spec问题分析
原Spec中使用@2遍历所有属性,导致每个数组元素都接收了所有属性的值,最终形成重复数组。
修正后的Jolt Spec
[ { "operation": "shift", "spec": { "*": { "@(1,&)": "array[#2].&", "@(2,id)": "array[#2].repeatedId" } } } ]
逻辑说明
*遍历原对象的每一个属性@(1,&)获取当前遍历到的属性的键值对,映射到array数组的对应索引位置(#2表示当前属性的索引,从0开始计数)@(2,id)向上两层获取原对象的id值,作为repeatedId字段添加到同一个数组元素中- 该Spec完全动态,可适配任意数量、任意名称的属性
修正后输出
与期望输出完全一致,每个数组元素仅包含单个原属性和repeatedId,无重复数组问题。
内容的提问来源于stack exchange,提问作者Nick McGurk
相关产品推荐
相关产品推荐

