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

API返回JSON数据提取geocode字段报错,求解决方案及疑问解答

搞定你的API数据提取问题!

嘿,作为刚接触API的新手,踩这些结构访问的坑太正常啦,我帮你一步步理清楚:

一、先解决那个恼人的报错:list indices must be integers, not str

你的代码里对JSON结构的访问逻辑完全搞反了,咱们拆解下问题:

  • 首先,data['features']是个列表,得先通过索引(比如[0])拿出列表里的单个元素,不能直接用['id']去访问列表哦
  • 每个feature里的properties是个字典,不是列表,所以根本不需要加[0]
  • geocode是properties里的子字典,同样不是列表,也不用加[0]
  • 还有个关键:response.json()已经帮你把响应转成Python能直接用的字典/列表了,再用json.loads()纯纯是多此一举,这就是你疑问里的冗余操作!

修正后的可用代码:

import requests

response = requests.get("https://api.weather.gov/alerts/active")
data = response.json()

# 提取第一条预警的geocode数据
first_geocode = data['features'][0]['properties']['geocode']
print(first_geocode)

# 如果要把所有预警的geocode都捞出来,用循环就行
all_geocodes = []
for feature in data['features']:
    geocode = feature['properties']['geocode']
    all_geocodes.append(geocode)

二、关于“JSON转换是否冗余”的疑问

绝对冗余!requests的response.json()方法已经自动把接口返回的JSON字符串解析成Python原生的字典、列表了,直接用就行。你要是再套个json.loads(),反而会报错,因为它只认字符串输入,不认已经解析好的Python对象。

三、给新手的小技巧:搞不清结构就打印类型

以后再遇到这种结构搞混的情况,直接打印每一层的类型就能理清:

print(type(data['features']))  # 会输出 <class 'list'>,说明这是列表,得先取索引
print(type(data['features'][0]['properties']))  # 输出 <class 'dict'>,说明是字典,用键直接访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:28:35