You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用met.no天气API解析JSON时出现报错如何排查解决

报错根因

两个报错均为代码逻辑写法错误导致,对应触发原因如下:

  • AttributeError: 'str' object has no attribute 'load':JSON解析方法调用错误。json.load()的入参要求是可读文件/流对象,解析字符串类型的JSON内容需要使用json.loads()(方法名末尾的s是string的缩写)。
  • string indices must be integers:该报错是连锁触发:一是JSON解析方法用错后,json_data并未被转换为字典类型,仍然是字符串,用字符串键(比如"type")索引字符串时,Python要求字符串索引必须是整数,因此抛出该错误;二是代码中多余的.replace("'", '"')逻辑会破坏JSON结构——met.no返回的是标准JSON,本身使用双引号包裹键值,强行替换单引号如果遇到文本内容中自带单引号的场景(比如天气描述里的缩写),会直接导致JSON格式损坏。
修复步骤
  • 将json.load(json_str)替换为json.loads(json_str),使用正确的字符串JSON解析方法。
  • 删除多余的.replace("'", '"')逻辑,保留原生返回的JSON字符串结构即可。
  • 避免使用type作为变量名:type是Python内置函数,占用内置命名空间可能引发其他隐性问题,替换为其他自定义变量名即可。
修复后可运行代码
import json
from urllib.request import Request, urlopen

# 读取天气预报接口数据
url = "https://api.met.no/weatherapi/locationforecast/2.0/complete?lat=59.911491&lon=10.757933"
req = Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Python/3.10.5')
content: bytes = urlopen(req).read()

# 转换为JSON对象
json_str: str = content.decode('utf8')
json_data = json.loads(json_str)

# 读取并打印字段
forecast_type = json_data["type"]
print(forecast_type)
运行效果

代码正常执行后会输出接口返回的顶级type字段值Feature,不会再触发上述两个报错。

内容的提问来源于stack exchange,提问作者Europa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:18:16