如何用Django(Python 2)从JSON中获取对应时间与数值
实现时间与数值的一一对应方案
这问题我之前做数据可视化处理时经常碰到,核心思路就是利用数组索引对齐——既然你的时间戳和数值是按顺序一一对应的,只要遍历其中一个数组,用相同索引去取另一个数组的元素就行。下面给你两种常用语言的具体实现:
假设你的JSON结构示例
先模拟一个符合你描述的JSON结构(如果实际结构有差异,调整路径即可):
{ "timestamps": [1515831588000, 1515838788000, 1515845987000], "values": { "data": [1, 2, 3], "type": "metric_value" } }
JavaScript 实现
// 假设已解析得到JSON对象 const jsonData = { timestamps: [1515831588000, 1515838788000, 1515845987000], values: { data: [1, 2, 3], type: "metric_value" } }; // 先校验数组长度一致性,避免索引越界 if (jsonData.timestamps.length !== jsonData.values.data.length) { throw new Error("时间戳数组与数值数组长度不匹配,无法一一对应"); } // 生成对应关系数组 const pairedData = jsonData.values.data.map((value, index) => ({ timestamp: jsonData.timestamps[index], value: value, valueType: jsonData.values.type })); console.log(pairedData); // 输出结果: // [ // { timestamp: 1515831588000, value: 1, valueType: 'metric_value' }, // { timestamp: 1515838788000, value: 2, valueType: 'metric_value' }, // { timestamp: 1515845987000, value: 3, valueType: 'metric_value' } // ]
Python 实现
# 解析后的JSON数据 json_data = { "timestamps": [1515831588000, 1515838788000, 1515845987000], "values": { "data": [1, 2, 3], "type": "metric_value" } } # 校验数组长度 if len(json_data["timestamps"]) != len(json_data["values"]["data"]): raise ValueError("时间戳数组与数值数组长度不一致,无法完成对应匹配") # 方式1:循环遍历生成 paired_data = [] for idx, val in enumerate(json_data["values"]["data"]): paired_data.append({ "timestamp": json_data["timestamps"][idx], "value": val, "value_type": json_data["values"]["type"] }) # 方式2:更简洁的列表推导式 # paired_data = [ # { # "timestamp": json_data["timestamps"][idx], # "value": val, # "value_type": json_data["values"]["type"] # } for idx, val in enumerate(json_data["values"]["data"]) # ] print(paired_data) # 输出结果: # [ # {'timestamp': 1515831588000, 'value': 1, 'value_type': 'metric_value'}, # {'timestamp': 1515838788000, 'value': 2, 'value_type': 'metric_value'}, # {'timestamp': 1515845987000, 'value': 3, 'value_type': 'metric_value'} # ]
关键注意事项
- 数组长度校验:一定要先检查时间戳数组和数值数组的长度是否相等,避免出现索引越界或者部分数据匹配错误的问题。
- 路径调整:如果你的实际JSON结构中,时间戳或数值所在的层级和示例不同,只需要修改代码中对应的属性路径即可,核心的索引对齐逻辑不变。
内容的提问来源于stack exchange,提问作者Abhimanyu Saharan
相关产品推荐
相关产品推荐

