请求编写Jolt转换规则:动态键值转code/值并将ts转为CET时间
Jolt转换实现方案
输入JSON
[ { "x1": 29.684, "tz_offset": 3600, "x2": 29.957, "x3": -0.001, "x4": 0.041, "ts": 1727870442, "machine_name": "SL Station" } ]
期望输出JSON
{ "Date": "2024-10-02 12:00:42", "data": [ { "code": "x1", "value": 29.684 }, { "code": "x2", "value": 29.957 }, { "code": "x3", "value": -0.001 }, { "code": "x4", "value": 0.041 } ], "machinename": "SL Station" }
Jolt转换规则
[ // 提取数组第一个对象作为根节点 { "operation": "shift", "spec": { "0": "" } }, // 转换动态键值对结构,处理固定字段 { "operation": "shift", "spec": { "machine_name": "machinename", "ts": "ts", "tz_offset": "tz_offset", // 匹配所有数字结尾的动态键(如x1、y2等) "*[0-9]": { "$": "data[#2].code", "@": "data[#2].value" } } }, // 生成CET格式日期字符串 { "operation": "modify-overwrite-beta", "spec": { "Date": "=formatTimestamp('yyyy-MM-dd HH:mm:ss', @(1,ts), @(1,tz_offset))" } }, // 清理临时字段 { "operation": "remove", "spec": { "ts": "", "tz_offset": "" } } ]
规则说明
- 第一步
shift:将输入数组的首个元素提取为后续处理的根对象; - 第二步
shift:重命名machine_name为machinename,暂存ts和tz_offset用于日期转换,同时把所有数字结尾的动态键转换为code/value结构存入data数组; - 第三步
modify:调用Jolt内置的formatTimestamp函数,结合时间戳与时区偏移量生成指定格式的日期字符串; - 第四步
remove:删除临时保留的ts和tz_offset字段,得到最终输出结构。
内容的提问来源于stack exchange,提问作者casper
相关产品推荐
相关产品推荐

