如何用JOLT转换复杂JSON嵌套数组?字段映射难题求助
解决JOLT嵌套数组转对象并关联表头的问题
看起来你已经找对了大致方向,但需要调整JOLT spec的层级映射逻辑,确保meta、name这类全局字段能复制到每个生成的对象里,同时让values数组的元素和headers表头精准对应上。
问题拆解
你的当前spec有两个核心问题需要修正:
- 没有将
meta和data.name的字段同步到每个values子数组对应的对象中 - 数组索引的层级映射需要调整,保证
values的元素能正确关联headers的对应表头
正确的JOLT Spec
下面的spec分三步完成转换逻辑,每一步的职责清晰:
- 先将
values的元素按headers映射成键值对,同时暂存meta和name字段 - 把暂存的全局字段合并到每个数组对象中
- 整理出最终的纯净数组结构
[ // 第一步:映射values到headers,并暂存全局字段 { "operation": "shift", "spec": { "data": { "details": { "values": { "*": { "*": { "@(3,headers[&1])": "[&2].&" } } } }, "name": "tempName" }, "meta": { "*": "tempMeta.&" } } }, // 第二步:将暂存的全局字段合并到每个对象 { "operation": "shift", "spec": { "[0-9]*": { "@": "&", "@(1,tempName)": "&.name", "@(1,tempMeta.regId)": "&.regId", "@(1,tempMeta.cId)": "&.cId", "@(1,tempMeta.weId)": "&.weId" } } }, // 第三步:整理为最终目标数组 { "operation": "shift", "spec": { "*": "[]" } } ]
关键逻辑解释
- 第一步里的
@(3,headers[&1]):从当前元素(values[i][j])往上数3层定位到headers数组,用当前元素的索引&1(也就是j)匹配对应的表头作为键名;[&2]表示把键值对放到数组的第i个位置(&2是values子数组的索引)。 - 第二步通过
@(1,tempName)和@(1,tempMeta.*),把暂存的全局字段合并到每个数组对象里,保证每个对象都包含完整的信息。 - 第三步把带数字索引的对象重新整理成纯净的数组,和你期望的输出结构完全匹配。
用这个spec处理你的输入JSON,就能得到想要的结果啦。
内容的提问来源于stack exchange,提问作者RosaNegra
相关产品推荐
相关产品推荐

