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

如何反序列化含动态键值对的JSON响应并转换为指定格式

解决方案:将嵌套JSON转换为按时间戳拆分的单条记录

核心思路

遍历原始JSON数组中的每个用户数据对象,提取user_id后,以时间戳为维度,将同一时间点的hr、rr、snoring值整合为单条独立记录。

代码实现(JavaScript)

假设原始数据中hr、rr、snoring的时间戳完全一致,可直接用以下代码转换:

const originalData = [
  {
    "user_id":30826889,
    "hr":{"1664325660":65,"1664325720":65,"1664325780":70},
    "rr":{"1664325660":18,"1664325720":17,"1664325780":15},
    "snoring":{"1664325660":0,"1664325720":0,"1664325780":0}
  },
  {
    "user_id":30826889,
    "hr":{"1664340780":72,"1664340840":70,"1664340900":71,"1664340960":70,"1664341020":67,"1664341080":71,"1664341140":69,"1664341200":68,"1664341260":66,"1664341320":68},
    "rr":{"1664340780":20,"1664340840":20,"1664340900":19,"1664340960":20,"1664341020":19,"1664341080":19,"1664341140":19,"1664341200":21,"1664341260":22,"1664341320":22},
    "snoring":{"1664340780":0,"1664340840":0,"1664340900":0,"1664340960":0,"1664341020":0,"1664341080":0,"1664341140":0,"1664341200":0,"1664341260":0,"1664341320":0}
  }
];

const transformedRecords = [];

originalData.forEach(dataItem => {
  const userId = dataItem.user_id;
  // 提取所有时间戳(从hr字段的键中获取)
  const timestamps = Object.keys(dataItem.hr);
  
  timestamps.forEach(timestamp => {
    transformedRecords.push({
      user_id: userId,
      timestamp: timestamp,
      hr: dataItem.hr[timestamp],
      rr: dataItem.rr[timestamp],
      snoring: dataItem.snoring[timestamp]
    });
  });
});

// 输出每条转换后的记录
transformedRecords.forEach(record => {
  console.log(JSON.stringify(record));
});

处理时间戳不一致的情况

如果hr、rr、snoring的时间戳可能存在差异,可通过取时间戳并集的方式处理,缺失值设为null:

originalData.forEach(dataItem => {
  const userId = dataItem.user_id;
  // 获取所有时间戳的并集
  const allTimestamps = new Set([
    ...Object.keys(dataItem.hr),
    ...Object.keys(dataItem.rr),
    ...Object.keys(dataItem.snoring)
  ]);
  
  allTimestamps.forEach(timestamp => {
    transformedRecords.push({
      user_id: userId,
      timestamp: timestamp,
      hr: dataItem.hr[timestamp] ?? null,
      rr: dataItem.rr[timestamp] ?? null,
      snoring: dataItem.snoring[timestamp] ?? null
    });
  });
});

输出示例

运行代码后,会输出符合需求的单条JSON记录,例如:

{"user_id":30826889,"timestamp":"1664325660","hr":65,"rr":18,"snoring":0}
{"user_id":30826889,"timestamp":"1664325720","hr":65,"rr":17,"snoring":0}
{"user_id":30826889,"timestamp":"1664325780","hr":70,"rr":15,"snoring":0}

内容的提问来源于stack exchange,提问作者Abul Bashar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:45:41