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

Python使用urllib获取API的JSON响应后提取forecast值报错如何解决

问题根因

你遇到的TypeError: string indices must be integers错误核心原因是**json_obj实际仍然是字符串类型,没有被成功解析为Python字典**。直接打印字符串类型的JSON内容和打印解析后的字典输出视觉差异很小,很容易忽略类型问题,所以你打印json_obj看起来是正常的JSON结构,但实际不支持字典的键索引操作。

常见原因及对应解决方案
  • 原因1:json.loads执行逻辑被跳过,可能你的代码结构里json_obj = json.loads(string)这行写在异常分支、或者执行流程中没有走到这一步,json_obj实际是你提前定义的其他字符串变量。
    解决方案:在json.loads后加一行类型校验代码确认解析结果:
    json_obj = json.loads(string)
    print(type(json_obj)) # 确认输出是<class 'dict'>才代表解析成功
    
  • 原因2:API返回的内容不是纯JSON字符串,前后存在多余的空白字符、转义符或者其他非JSON内容,导致json.loads解析异常。
    解决方案:解析前先清洗返回的字符串,去除首尾空白后再解析;如果你的代码包裹了try-except块,可暂时注释异常捕获逻辑,看json.loads是否抛出JSON解析异常,确认返回内容是否符合格式要求:
    string = response.read().decode('utf-8').strip()
    json_obj = json.loads(string)
    
  • 原因3:代码中存在变量名冲突,你之前定义过同名的json_obj字符串变量,覆盖了解析后的字典结果。
    解决方案:修改变量名避免冲突,或者在解析前重置变量。
可直接运行的验证代码

解析成功后用你原来的写法就能正常拿到forecast值:

import urllib.request
import json

response = urllib.request.urlopen(req)
string = response.read().decode('utf-8').strip()
# 先打印返回的原始字符串确认内容符合预期
print("原始返回内容:", string)
json_obj = json.loads(string)
print("解析后类型:", type(json_obj))
print(json_obj['forecast'][0])

内容的提问来源于stack exchange,提问作者M.Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:57:05