Python解析JSON报list索引错误 如何正确提取目标url字段
问题原因
你收到TypeError: list indices must be integers or slices, not str报错的核心原因是:当你给NASA APOD接口同时传入start_date和end_date参数时,接口返回的JSON结果是由每日数据字典组成的列表,而非单个数据字典。列表类型不支持用字符串键(比如你写的'url')直接取值,只能通过整数下标、切片访问内部元素。
正确提取方法
根据你的需求选对应写法即可:
- 提取指定位置结果的url(比如返回的第一条,对应你传入的起始日期数据)
parsed = r.json() # 下标从0开始计数,0代表第一个元素 url = parsed[0]['url'] print(url)
- 提取返回结果里所有日期对应的url
parsed = r.json() all_urls = [item['url'] for item in parsed] print(all_urls)
- 根据指定日期匹配对应的url
parsed = r.json() target_date = '2022-06-09' # 替换成你要找的日期 target_url = '' for item in parsed: if item['date'] == target_date: target_url = item['url'] break print(target_url)
补充提示
如果你只需要查询单天的APOD数据,不需要传start_date和end_date两个参数,只传date参数即可,这时候接口返回的是单个字典结构,你原本写的parsed['url']代码就可以正常运行。
内容的提问来源于stack exchange,提问作者mrstrike
相关产品推荐
相关产品推荐

