如何让JavaScript输出为JSON格式并将值数据按列而非行展示
行转列格式的JSON转换方案
核心思路
将原有的行式数据(每个对象代表一条完整记录)转换为列式结构——每个字段对应一个数组,集中存储所有记录的该字段值。
适配Node-RED Function节点的代码实现
假设你的msg.payload存储的是行式对象数组,可直接在Function节点中使用以下代码完成转换:
// 获取输入的行式数据 const rowDataset = msg.payload; // 初始化空的列式结构容器 const columnDataset = {}; // 遍历每条行记录 rowDataset.forEach(row => { // 遍历当前记录的所有字段 Object.keys(row).forEach(field => { // 若字段未在容器中初始化,则创建对应数组 if (!columnDataset[field]) { columnDataset[field] = []; } // 将当前记录的字段值追加到对应数组中 columnDataset[field].push(row[field]); }); }); // 替换payload为转换后的列式JSON msg.payload = columnDataset; return msg;
效果对比
- 原行式输出示例:
[ {"sensorId": "temp_01", "reading": 22.5}, {"sensorId": "temp_02", "reading": 24.1}, {"sensorId": "temp_03", "reading": 23.3} ]
- 转换后列式输出示例:
{ "sensorId": ["temp_01", "temp_02", "temp_03"], "reading": [22.5, 24.1, 23.3] }
补充说明
- 如果存在字段缺失的记录,可通过
columnDataset[field].push(row[field] ?? null)为缺失字段添加null占位符,保证数组长度一致 - 若输入数据不是标准对象数组,需先添加数据校验逻辑(如判断
Array.isArray(rowDataset)),避免转换报错
内容的提问来源于stack exchange,提问作者Charmi Zala
相关产品推荐
相关产品推荐

