如何用JOLT将JSON内数组拆分为多行并过滤无效数据?
使用JOLT拆分JSON数组并过滤无效条目
需求概述
需要完成两个核心操作:
- 将JSON中的数组元素拆分为独立的JSON对象(多行输出)
- 过滤两类无效条目:
- 原数据中没有
stations数组的条目 stations数组元素中缺少stationname字段的条目
- 原数据中没有
输入示例
[ { "id": "1", "stations": [ { "stationname": "Station A", "code": "A01" }, { "code": "B02" } ] }, { "id": "2" }, { "id": "3", "stations": [ { "stationname": "Station C", "code": "C03" } ] } ]
预期输出示例
[ { "id": "1", "stationname": "Station A", "code": "A01" }, { "id": "3", "stationname": "Station C", "code": "C03" } ]
JOLT转换规范
[ // 展开数组并关联上层id { "operation": "shift", "spec": { "*": { "stations": { "*": { "@(2,id)": "[&1].id", "*": "[&1].&" } } } } }, // 过滤缺少stationname的条目 { "operation": "filter", "spec": { "*": { "stationname": "notNull" } } }, // 清理空对象 { "operation": "remove", "spec": { "*": { "": "" } } } ]
步骤说明
- Shift操作:遍历输入的每个顶级对象,将
stations数组内的每个元素与上层的id字段绑定,生成包含id和数组元素字段的独立对象。@(2,id)用于向上两层获取id值,[&1]确保每个数组元素对应一个独立的数组索引。 - Filter操作:检查每个生成的对象是否存在非空的
stationname字段,自动过滤掉不符合条件的条目(包括原数据中没有stations数组的对象,这类对象在Shift后会变成空对象)。 - Remove操作:彻底清理Shift过程中可能产生的空对象,保证输出结果干净。
内容的提问来源于stack exchange,提问作者casper
相关产品推荐
相关产品推荐

