
本文介绍如何将包含多个传感器值的扁平 json 对象,按 sensor 前缀键动态重构为以传感器名为键、每个键对应含 timestamp 和 value 字段的嵌套对象的标准化结构。
本文介绍如何将包含多个传感器值的扁平 json 对象,按 sensor 前缀键动态重构为以传感器名为键、每个键对应含 timestamp 和 value 字段的嵌套对象的标准化结构。
在物联网或工业数据采集场景中,原始设备上报的数据常以扁平结构(如 CSV 映射的 JSON)呈现:所有字段(包括时间戳、记录序号及各传感器读数)同级存在。但下游系统(如可视化平台、时序数据库写入器)往往需要更语义化、可扩展的嵌套格式——即每个传感器独立成键,其值为包含时间戳与测量值的对象。
实现该转换的核心思路是:过滤出以 "Sensor" 开头的字段,为每个匹配键创建新对象,并复用原始数据中的 TIMESTAMP 字段。推荐使用 Object.entries() 配合 reduce() 方法,兼顾可读性与函数式风格:
const input = {
"TIMESTAMP": "2022-10-21 13:55:00",
"RECORD": "0",
"Sensor1": "1.654",
"Sensor2": "1.176",
"Sensor3": "0.706"
};
const result = Object.entries(input).reduce((acc, [key, value]) => {
if (key.startsWith("Sensor")) {
acc[key] = {
TIMESTAMP: input.TIMESTAMP,
Value: value
};
}
return acc;
}, {});
console.log(result);
// 输出:
// {
// "Sensor1": { "TIMESTAMP": "2022-10-21 13:55:00", "Value": "1.654" },
// "Sensor2": { "TIMESTAMP": "2022-10-21 13:55:00", "Value": "1.176" },
// "Sensor3": { "TIMESTAMP": "2022-10-21 13:55:00", "Value": "0.706" }
// }✅ 注意事项:
-
TIMESTAMP字段必须存在于输入对象中,否则会赋值为undefined;建议增加校验逻辑(如input.TIMESTAMP ?? new Date().toISOString())提升鲁棒性; - 若传感器键名不固定(如
temp_01,humid-sensor-A),可将startsWith("Sensor")替换为正则匹配(如/^(temp|humid|pressure)/i.test(key)); - 如需数值类型转换(如
"1.654"→1.654),可在赋值时使用parseFloat(value),并处理NaN边界情况; - 此方案时间复杂度为 O(n),适用于单条记录处理;批量转换时可封装为纯函数并结合
map()使用。
该模式简洁、无副作用、易于测试与复用,是数据预处理管道中结构标准化的典型实践。

















