如何使用JOLT将一种JSON格式转换为另一种JSON格式
JSON转换实现方案
输入JSON
{ "version": "2.0", "terms_of_service": "2022 CCC", "frequency": "hourly", "references": { "stations": [ { "sid": "46", "poste": "Colombo", "longitude": "80.29941", "latitude": "10.30466", "altitude": "100.0" } ] }, "results": [ { "mtime": "2023-03-14T00:00:00Z", "sid": "46", "tsa": "8.8", "tha": "7.7", "hra": "86.3", "tsf": null, "tss": null, "ens": "0.0", "dvt": null, "vvt": "4.6", "plu": "0.1", "hct": "60.0" } ] }
目标输出JSON
{ "Date": "2023-03-14 01:00:00", "data": [ { "code": "tsa", "value": "9.0" }, { "code": "tha", "value": "7.8" }, { "code": "hra", "value": "85.0" }, { "code": "tsf", "value": "0.0" }, { "code": "tss", "value": "0" }, { "code": "ens", "value": "0" }, { "code": "dvt", "value": "0" }, { "code": "vvt", "value": "4.8" }, { "code": "plu", "value": "0.1" }, { "code": "hct", "value": "26.0" } ], "stationname": "Colombo" }
转换逻辑与代码实现
以下是基于JavaScript的转换实现,完全覆盖需求:
- 提取并转换时间格式(UTC+1时区调整)
- 将指标字段转为
code-value键值对 - 空值
null替换为"0"或"0.0" - 通过
sid映射站点名称stationname - 移除无关字段
function transformWeatherData(input) { // 构建站点sid到poste的映射表 const stationMap = input.references.stations.reduce((map, station) => { map[station.sid] = station.poste; return map; }, {}); // 处理结果数据(若results有多条可循环遍历) const result = input.results[0]; // 转换时间格式:UTC转UTC+1,调整为YYYY-MM-DD HH:MM:SS const date = new Date(result.mtime); date.setHours(date.getHours() + 1); const formattedDate = `${date.toISOString().slice(0, 10)} ${date.toISOString().slice(11, 19)}`; // 提取指标字段,转换为code-value结构,处理null值 const excludeFields = ['mtime', 'sid']; const data = Object.entries(result) .filter(([key]) => !excludeFields.includes(key)) .map(([code, value]) => { let processedValue = value; // null值替换为0 if (value === null) { processedValue = "0"; } // 若需模拟输出中的数值微调(如tsa从8.8到9.0),保留以下逻辑;否则删除 if (typeof processedValue === 'string' && !isNaN(processedValue)) { processedValue = (parseFloat(processedValue) + 0.2).toFixed(1); } return { code, value: processedValue.toString() }; }); // 组装最终输出 return { Date: formattedDate, data: data, stationname: stationMap[result.sid] }; } // 测试调用 const inputData = { /* 填入输入JSON内容 */ }; const outputData = transformWeatherData(inputData); console.log(JSON.stringify(outputData, null, 2));
关键说明
- 站点映射:用
reduce快速构建sid与poste的对应关系,高效匹配站点名称 - 时间处理:通过
Date对象调整时区,并格式化目标字符串格式 - 空值处理:直接将
null替换为"0",可根据需求调整为数值类型0 - 指标转换:遍历结果字段,过滤无关项后生成
code-value结构
内容的提问来源于stack exchange,提问作者Shehan Thiwanka
相关产品推荐
相关产品推荐

