如何用JavaScript拆分字符串并按类型归类数据至对应表格?
解决方案:按类型拆分JSON数据并归类到对应数组
当然可以!我来帮你搞定这个数据分类的问题——不管你是用前端的JavaScript还是后端的PHP,都能轻松把数据拆分归类到对应的数组里,刚好匹配你网页上的三个表格。
JavaScript 实现思路
首先解析获取到的JSON数据,然后遍历每个数据项,从data字段中提取类型标识(A/B/E)和后面的5位有效数值,再根据标识将数据推入对应数组:
// 假设你已经通过接口获取并解析了JSON数据 const gatewayData = {"timestamp":1526524809413,"data":[ {"_id":"rJeixnNtpG","data":"N11B00074","raw": [78,49,49,66,48,48,48,55,52],"timestamp":1525398515116}, {"_id":"HkzognEYpf","data":"N11E00000","raw": [78,49,49,69,48,48,48,48,48],"timestamp":1525398515479}, {"_id":"BJxXp4t6M","data":"N11A00029","raw": [78,49,49,65,48,48,48,50,57],"timestamp":1525398807747} ]}; // 初始化三个分类数组,对应你的三个表格 const humidityList = []; // B → 湿度表 const temperatureList = []; // A → 温度表 const phList = []; // E → pH值表 // 遍历数据进行分类处理 gatewayData.data.forEach(item => { const dataString = item.data; // 提取类型标识(第3个字符,字符串索引从0开始) const type = dataString.charAt(2); // 提取后面5位有效数字(从第4位开始截取5个字符) const validValue = dataString.slice(3, 8); // 可以把时间戳也保留,方便表格展示数据时间 const formattedData = { timestamp: item.timestamp, value: validValue }; // 根据类型归类 switch(type) { case 'B': humidityList.push(formattedData); break; case 'A': temperatureList.push(formattedData); break; case 'E': phList.push(formattedData); break; default: console.warn(`遇到未知数据类型:${type},原始数据:${dataString}`); } }); // 现在你可以用这三个数组直接填充对应表格了 console.log('湿度表数据:', humidityList); console.log('温度表数据:', temperatureList); console.log('pH值表数据:', phList);
如果需要把时间戳转换成可读的日期格式,可以在formattedData里加上:
formattedData.readableTime = new Date(item.timestamp).toLocaleString();
PHP 实现思路
如果你是在后端用PHP处理数据,逻辑和JS类似:解析JSON,遍历分类,最后生成表格HTML输出到前端:
// 假设你已经从网关接口获取到JSON字符串 $jsonResponse = '{ "timestamp":1526524809413, "data":[ {"_id":"rJeixnNtpG","data":"N11B00074","raw": [78,49,49,66,48,48,48,55,52],"timestamp":1525398515116}, {"_id":"HkzognEYpf","data":"N11E00000","raw": [78,49,49,69,48,48,48,48,48],"timestamp":1525398515479}, {"_id":"BJxXp4t6M","data":"N11A00029","raw": [78,49,49,65,48,48,48,50,57],"timestamp":1525398807747} ] }'; // 解析JSON为关联数组 $gatewayData = json_decode($jsonResponse, true); // 初始化分类数组 $humidityData = []; $temperatureData = []; $phData = []; // 遍历数据分类 foreach ($gatewayData['data'] as $item) { $dataStr = $item['data']; // 提取类型标识 $type = $dataStr[2]; // 提取5位有效数值 $validValue = substr($dataStr, 3, 5); // 组装格式化数据,包含转换后的可读时间 $formattedItem = [ 'timestamp' => $item['timestamp'], 'readableTime' => date('Y-m-d H:i:s', $item['timestamp'] / 1000), // 毫秒转秒 'value' => $validValue ]; // 归类到对应数组 switch ($type) { case 'B': $humidityData[] = $formattedItem; break; case 'A': $temperatureData[] = $formattedItem; break; case 'E': $phData[] = $formattedItem; break; default: error_log("未知数据类型:{$type},原始数据:{$dataStr}"); } } // 生成湿度表HTML示例 echo '<h3>湿度表</h3>'; echo '<table border="1" cellpadding="8">'; echo '<tr><th>时间</th><th>湿度值</th></tr>'; foreach ($humidityData as $row) { echo "<tr><td>{$row['readableTime']}</td><td>{$row['value']}</td></tr>"; } echo '</table>'; // 温度表和pH值表可以用同样的方式生成...
注意事项
- 以上代码基于你给出的
data字段格式(固定为N1XYYYYY,X是类型标识,Y是5位数字),如果后续格式有变化,只需要调整charAt/slice(JS)或substr(PHP)的参数即可。 - 时间戳是毫秒级的,PHP转换时需要除以1000转换成秒级时间戳才能用
date函数处理。
内容的提问来源于stack exchange,提问作者Daine MacTavish
相关产品推荐
相关产品推荐

