如何用JOLT转换扁平数组为嵌套数组并添加根节点字段
JOLT配置方案:提取公共字段到data节点,剩余字段存入drives数组
示例输入
假设你的扁平数组输入如下(所有元素的Number/Category/Type字段值一致):
[ { "Number": "DRV-001", "Category": "Storage", "Type": "SSD", "Model": "Samsung 980 Pro", "Capacity": "1TB" }, { "Number": "DRV-001", "Category": "Storage", "Type": "SSD", "Model": "Crucial P3", "Capacity": "2TB" } ]
期望输出
{ "data": { "Number": "DRV-001", "Category": "Storage", "Type": "SSD", "drives": [ { "Model": "Samsung 980 Pro", "Capacity": "1TB" }, { "Model": "Crucial P3", "Capacity": "2TB" } ] } }
最终JOLT配置
[ // 1. 映射字段:公共字段到data节点,剩余字段到drives数组 { "operation": "shift", "spec": { "*": { "Number": "data.Number", "Category": "data.Category", "Type": "data.Type", "*": "data.drives[]" } } }, // 2. 去重公共字段:确保单个值而非数组(因数组每个元素都会赋值一次) { "operation": "cardinality", "spec": { "data": { "Number": "ONE", "Category": "ONE", "Type": "ONE" } } } ]
配置说明
- Shift操作:遍历输入数组的每一个元素,将指定的三个字段直接映射到
data节点下;用通配符*匹配剩余所有字段,逐个存入data.drives数组。 - Cardinality操作:由于数组中每个元素都会给
Number/Category/Type赋值一次,默认会生成数组格式,这一步强制将这些字段转为单个值(若原数组中这些字段值不一致,会保留最后一个元素的对应值;如果需要按字段分组,需额外调整逻辑)。
内容的提问来源于stack exchange,提问作者Grant
相关产品推荐
相关产品推荐

