如何用Jolt Transform将Meteomatics API JSON转为表格格式?
解决Meteomatics API JSON转行列格式的Jolt配置问题
示例输入(模拟Meteomatics API响应)
{ "dateGenerated": "2024-05-20T12:00:00Z", "parameters": [ { "name": "temp", "units": "C", "coordinates": [ { "lat": 40.7128, "lon": -74.0060, "dates": [ { "date": "2024-05-20T13:00:00Z", "value": 22.5 }, { "date": "2024-05-20T14:00:00Z", "value": 23.1 } ] }, { "lat": 34.0522, "lon": -118.2437, "dates": [ { "date": "2024-05-20T13:00:00Z", "value": 25.3 } ] } ] } ] }
期望输出(行列格式)
[ { "dateGenerated": "2024-05-20T12:00:00Z", "parameter": "temp", "units": "C", "lat": 40.7128, "lon": -74.0060, "date": "2024-05-20T13:00:00Z", "value": 22.5 }, { "dateGenerated": "2024-05-20T12:00:00Z", "parameter": "temp", "units": "C", "lat": 40.7128, "lon": -74.0060, "date": "2024-05-20T14:00:00Z", "value": 23.1 }, { "dateGenerated": "2024-05-20T12:00:00Z", "parameter": "temp", "units": "C", "lat": 34.0522, "lon": -118.2437, "date": "2024-05-20T13:00:00Z", "value": 25.3 } ]
正确的Jolt Transform配置
[ { "operation": "shift", "spec": { "parameters": { "*": { "name": "[&1].parameter", "units": "[&1].units", "coordinates": { "*": { "lat": "[&3].lat", "lon": "[&3].lon", "dates": { "*": { "@(6,dateGenerated)": "[&5].dateGenerated", "@(4,parameter)": "[&5].parameter", "@(4,units)": "[&5].units", "@(2,lat)": "[&5].lat", "@(2,lon)": "[&5].lon", "date": "[&5].date", "value": "[&5].value" } } } } } } } }, { "operation": "remove", "spec": { "*": { "0": "", "1": "", "2": "" } } }, { "operation": "shift", "spec": { "*": { "*": "[]" } } } ]
配置说明
第一层Shift:通过
@(N,field)格式的层级引用,将上层嵌套的字段向下传递到每个日期条目:@(6,dateGenerated):从dates.*节点向上遍历6层到根节点,获取全局的生成时间@(4,parameter):向上遍历4层到parameters.*节点,获取参数名称(原name字段重命名为parameter)@(2,lat):向上遍历2层到coordinates.*节点,获取当前坐标的纬度- 用
[&N]索引确保每个日期条目对应独立的对象结构
Remove操作:清理第一层Shift后遗留的中间层级节点,避免冗余数据
第二层Shift:将分散的对象整理为统一的数组格式,完全适配SQL数据仓库的表结构要求
验证结果
该配置会将多层嵌套的JSON完全展开为扁平的行列格式,每条记录包含dateGenerated、parameter、lat、lon等所有需要的字段,可直接用于SQL入库操作。
内容的提问来源于stack exchange,提问作者Benjamin Bingham
相关产品推荐
相关产品推荐

