如何将从URL获取的JSON字典转换为以Time为索引、Metric为列的结构
解决字典转换为指定Metric-Time结构的方案
别担心,这个转换需求其实很容易实现,我用Python给你写了一套清晰的处理逻辑,完全匹配你给出的输入输出格式:
第一步:明确输入数据结构
首先假设你从URL拉取的JSON数据解析后是这样的列表(对应你给出的示例输入):
raw_data = [ {"time": "2021-01-28T00:00:00.000Z", "AdrActCnt": 1097896.0, "BlkCnt": 145.0, "BlkSizeByte": 190568423.0}, {"time": "2021-01-29T00:00:00.000Z", "AdrActCnt": 1208741.0, "BlkCnt": 152.0, "BlkSizeByte": 199725189.0}, {"time": "2021-01-30T00:00:00.000Z", "AdrActCnt": 1087755.0, "BlkCnt": 136.0, "BlkSizeByte": 177349536.0} ]
第二步:编写转换代码
def transform_metric_data(raw_data): if not raw_data: return {"metricData": {"metrics": [], "series": []}} # 提取所有Metric名称(排除time字段) metrics = [key for key in raw_data[0].keys() if key != "time"] # 构建series列表,处理time格式并按顺序生成values series = [] for item in raw_data: # 把time格式从.000Z转为Z,匹配目标输出 cleaned_time = item["time"].replace(".000Z", "Z") # 按metrics的顺序提取值并转为字符串 values = [str(item[metric]) for metric in metrics] series.append({"time": cleaned_time, "values": values}) # 组合成最终的目标结构 return { "metricData": { "metrics": metrics, "series": series } } # 调用函数并打印结果 result = transform_metric_data(raw_data) print(result)
代码说明
- Metric提取:从第一个数据条目中自动获取所有非
time的键作为metrics列表,这样即使后续新增Metric,代码也能自动适配,不用手动修改。 - Time格式处理:把输入中的
.000Z后缀替换为Z,完全匹配你给出的目标输出格式。 - Values顺序:严格按照metrics的顺序生成values列表,保证每个time对应的数值和Metric一一对应。
- 空数据兼容:加入了空数据判断,避免原始数据为空时出现索引错误。
运行这段代码后,你就能得到和示例完全一致的目标输出结构啦!
内容的提问来源于stack exchange,提问作者ATB
相关产品推荐
相关产品推荐

