如何使用JOLT映射数组:基于键值对构建多层JSON结构
JOLT转换方案
以下是实现你所需转换的JOLT规范:
[ { "operation": "shift", "spec": { "data": { "0": { "*": { "@2,1[&1]": "&.value", "@": "&.key" } } } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { "keyParts": "=split('\\.', @(1,key))" } } }, { "operation": "shift", "spec": { "*": { "keyParts": { "0": { "*": { "@2,value": "@(1)", "@3,keyParts[1]": { "^[0-9]+$": { "@2,value": "@(3)[@(1)].@(3,keyParts[2])" }, "*": { "@2,value": "@(4).@(1).@(3,keyParts[2])" } } } } } } } }, { "operation": "cardinality", "spec": { "*": { "*": "ONE", "*[]": "MANY" } } } ]
转换步骤说明:
- 配对键值对:通过
shift操作将输入中data数组的键列表和值列表按索引一一对应,生成包含key和value的对象数组。 - 拆分键路径:使用
modify-overwrite-beta的split函数,将每个点分隔的键拆分为数组形式的路径片段。 - 构建嵌套结构:再次通过
shift操作,根据拆分后的路径片段判断是构建对象还是数组:- 若路径第二层为数字(如
key3.0中的0),则将对应值放入数组指定下标的对象中; - 若路径第二层为字符串(如
key2.subkey2.1中的subkey2.1),则将对应值放入嵌套对象的指定键中; - 单层键直接映射为顶级键值对。
- 若路径第二层为数字(如
- 修正结构唯一性:
cardinality操作确保对象键唯一、数组元素正确聚合。
内容的提问来源于stack exchange,提问作者mycuser
相关产品推荐
相关产品推荐

