You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:42:12