如何将单键对应数组的JSON转换为带时间戳的键值对数组
JSON格式转换:单时间键数组转含时间戳的对象数组
需求说明
我有一段JSON数据,结构是单个时间戳键对应一个包含tag和value的对象数组,需要把它转换成每个对象都带上原时间戳(命名为ts)的数组格式。
源数据
{ "2022-08-30T06:58:56.573730Z": [ { "tag": "AC 3 Phase/7957", "value": 161.37313113545272 }, { "tag": "AC 3 Phase/7956", "value": 285.46869739695853 } ] }
目标格式
[ { "tag": "AC 3 Phase/7957", "ts": "2022-08-30T06:58:56.573730Z", "value": 161.37313113545272 }, { "tag": "AC 3 Phase/7956", "ts": "2022-08-30T06:58:56.573730Z", "value": 285.46869739695853 } ]
实现方案
JavaScript 版本
const source = { "2022-08-30T06:58:56.573730Z": [ { "tag": "AC 3 Phase/7957", "value": 161.37313113545272 }, { "tag": "AC 3 Phase/7956", "value": 285.46869739695853 } ] }; // 取出唯一的时间戳键 const timestamp = Object.keys(source)[0]; // 遍历数组,给每个对象添加ts字段 const transformed = source[timestamp].map(item => ({ ...item, ts: timestamp })); console.log(JSON.stringify(transformed, null, 2));
Python 版本
import json # 源JSON字符串 source_str = ''' { "2022-08-30T06:58:56.573730Z": [ { "tag": "AC 3 Phase/7957", "value": 161.37313113545272 }, { "tag": "AC 3 Phase/7956", "value": 285.46869739695853 } ] } ''' source_data = json.loads(source_str) # 获取时间戳键(因为只有一个键,直接取第一个) timestamp = next(iter(source_data.keys())) # 生成目标数组 transformed_data = [{**item, 'ts': timestamp} for item in source_data[timestamp]] # 打印格式化后的结果 print(json.dumps(transformed_data, indent=2))
核心思路
- 提取源数据中唯一的时间戳键;
- 遍历原数组里的每个对象,把时间戳作为
ts字段添加进去; - 最终得到包含所有带时间戳对象的数组。
内容的提问来源于stack exchange,提问作者Masterbuilder
相关产品推荐
相关产品推荐

