Python实现JSON转CSV:按ts分行、指标为列的需求与问题
问题解决:将JSON转换为按时间戳(ts)分行的CSV
需求说明
给定的JSON数据按传感器类型分组,每个组包含多条带时间戳(ts)和对应值(value)的记录。需要将其转换为CSV格式,要求同一时间戳的所有传感器值放在同一行,时间戳作为单独一列,各传感器类型作为列名。
原代码的问题在于逐传感器逐条写入数据,导致每个传感器值单独占一行,且未包含时间戳字段,最终格式不符合需求。
修正后的代码
import csv import json # 加载JSON数据 data = json.loads('{"temperature": [{"ts": 1672753924545, "value": "100"}], "temperature c1": [{"ts": 1672753924545, "value": "30.99036523512186"}], "conductivite_c1": [{"ts": 1672753924545, "value": "18.195760116755046"}], "pression_c1": [{"ts": 1672753924545, "value": "10.557751448931295"}], "ph_c1": [{"ts": 1672753924545, "value": "10.443975738053357"}], "http": [{"ts": 1672753924545, "value": "400"}]}') # 按时间戳分组,收集每个ts对应的所有传感器值 ts_groups = {} for sensor, records in data.items(): for record in records: ts = record['ts'] # 初始化该时间戳的存储字典 if ts not in ts_groups: ts_groups[ts] = {'ts': ts} # 将当前传感器值存入对应时间戳的字典 ts_groups[ts][sensor] = record['value'] # 生成CSV文件 with open('data.csv', 'w', newline='') as csvfile: # 定义列名:先ts字段,再所有传感器名称 fieldnames = ['ts'] + list(data.keys()) writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # 遍历每个时间戳分组,写入整行数据 for ts_row in ts_groups.values(): writer.writerow(ts_row)
代码说明
- 按时间戳分组:用字典
ts_groups将同一时间戳的所有传感器值整合到一起,确保每条时间戳对应一行数据。 - 构造列名:CSV列名优先包含
ts字段,再依次列出所有传感器类型,保证表头完整。 - 写入CSV:先写入表头,再将每个时间戳对应的整合数据写入文件,符合需求格式。
输出示例
生成的CSV内容如下:
ts,temperature,temperature c1,conductivite_c1,pression_c1,ph_c1,http 1672753924545,100,30.99036523512186,18.195760116755046,10.557751448931295,10.443975738053357,400
内容的提问来源于stack exchange,提问作者Brell
相关产品推荐
相关产品推荐

