Python 3.x提取嵌套JSON数据:获取气象API指定时段气温
提取气象API嵌套JSON中的指定时段气温数据
原代码问题修正
调用met.no的API必须添加User-Agent请求头,否则会被拒绝访问;另外重复调用response.json()会重复解析数据,建议先将JSON数据存入变量,提升效率。
实现步骤
- 发送请求并解析JSON数据,存入变量避免重复解析
- 遍历
properties.timeseries列表,逐个检查时间戳 - 匹配到目标时间后,提取对应时段的气温值
完整代码示例
import requests # 必须添加User-Agent,met.no API要求标识请求来源 headers = { 'User-Agent': 'YourAppName/1.0 (your@email.com)' } url = 'https://api.met.no/weatherapi/locationforecast/2.0/compact' parameters = { "lat": 40.416695, "lon": 8.306090, } response = requests.get(url, headers=headers, params=parameters) response.raise_for_status() # 检查请求是否成功 weather_data = response.json() # 解析JSON并存入变量 # 目标时间,格式要和API返回的一致 target_time = "2023-01-29T09:00:00Z" # 遍历时间序列 for entry in weather_data['properties']['timeseries']: if entry['time'] == target_time: temp = entry['data']['instant']['details']['air_temperature'] print(f"timestamp: {entry['time']}, temperature: {temp}°C") break # 找到目标后退出循环,避免不必要的遍历 else: print(f"未找到时段 {target_time} 的数据")
代码说明
response.raise_for_status():如果请求返回错误状态码(比如403、404),会直接抛出异常,方便排查问题- 嵌套字典访问:JSON解析后是Python字典,可通过
['key']逐层访问嵌套结构,比如weather_data['properties']['timeseries']直接拿到时间序列列表 for...else结构:如果循环正常结束(未匹配到目标时间),会执行else块的提示语句
内容的提问来源于stack exchange,提问作者pjoltergeist
相关产品推荐
相关产品推荐

