调用json.load()无返回结果求助:从天气API提取JSON数据遇问题
问题排查与修正方案
嘿,我帮你看了下代码,发现几个导致json.load()没返回结果的关键问题,一个个来解决:
1. json.load()的使用错误
json.load()函数是用来从文件对象中加载JSON数据的,但你传入的response.text是字符串类型,这会导致解析失败或者无结果。正确的做法有两种:
- 用
json.loads(response.text)来解析字符串格式的JSON; - 更推荐使用Requests库自带的
response.json()方法,它会自动帮你处理JSON解析,代码更简洁。
2. URL中的转义字符错误
你URL里的&是HTML的转义字符,直接放在请求URL里会被API识别成无效参数,应该替换成普通的&符号,这样API才能正确解析language和details这些参数。
3. 缺失有效的API密钥
你的api_key是空字符串,AccuWeather API需要有效的密钥才能返回数据,你得先去获取一个合法的API密钥填进去,否则请求会被权限拒绝。
修正后的完整代码
import requests import json def get_weather_from_api(location_id): api_key = '你的AccuWeather API密钥' # 替换成你的有效密钥 # 修正URL中的转义字符 url = f'http://dataservice.accuweather.com/currentconditions/v1/{location_id}?apikey={api_key}&language=en-us&details=false' response = requests.get(url) # 先检查请求是否成功,方便排查问题 if response.status_code == 200: # 使用requests自带的json()方法解析数据 data = response.json() print(data) else: # 打印错误信息,帮助定位问题(比如密钥无效、location_id错误等) print(f"请求失败,状态码: {response.status_code}") print(f"响应内容: {response.text}")
额外排查技巧
如果还是有问题,可以先打印response.text看看API返回的具体内容——如果是错误提示(比如密钥无效、location_id不存在),就能直接知道下一步该调整什么。
内容的提问来源于stack exchange,提问作者Sydwell
相关产品推荐
相关产品推荐

