python - 错误列表索引必须是整数或切片,而不是 str 当 formattig json
问题描述
运行此 python 脚本时出现以下错误:
for departure in snav_live_departures_data ['data']['departures']:
TypeError: list indices must be integers or slices, not str
这是代码
ximport urllib.request
from bs4 import BeautifulSoup
import json
def cleanText( text ):
return text.lower().capitalize()
#Snav - live departure
api_url = "https://booking.snav.it/api/v1/dashboard/nextDepartures?callback=jQuery12345&_=12345"
fh = urllib.request.urlopen(api_url)
snav_live_departures_table = fh.read().decode('utf-8')
fh.close()
snav_live_departures_data = json.loads(snav_live_departures_table[16:len(snav_live_departures_table)-2])
print(snav_live_departures_data)
snav_live_departures_data = []
for departure in snav_live_departures_data ['data']['departures']:
snav_live_departures_data.append({
"DEPARTURE DATE": departure['departureDate'],
"ARRIVAL DATE": departure['arrivalDate'],
"DEPARTURE PORT": cleanText( departure['departurePort'] ),
"ARRIVAL PORT": cleanText( departure['arrivalPort'] ),
"STATUS": "suspended" if departure['is_suspended'] else "active"
})
with open('snav_live_departures.json', 'w') as outfile:
json.dump(snav_live_departures, outfile)
这是从我的 JSON 数据中提取的
{"success": "OK", "message": "DEPARTURES_FOUND", "data": {"departures": [{"id": 58490, "itinerary_id": 1152, "codcorsa": "CMCA1812280640NG", "ship_description": "Fast Ferry", "delay": null, "is_suspended": null, "notes": null, "type_id": 1, "departurePort": "C/MARE", "arrivalPort": "CAPRI", "departureDate": "2018-12-28 06:40", "arrivalDate": "2018-12-28 07:35"}, {"id": 58471, "itinerary_id": 1148, "codcorsa": "NACA1812280700NS", "ship_description": "Fast Ferry", "delay": null, "is_suspended": null, "notes": null, "type_id": 1, "departurePort": "NAPOLI BEVERELLO", "arrivalPort": "CAPRI", "departureDate": "2018-12-28 07:00", "arrivalDate": "2018-12-28 07:50"},...
解决方案
和
snav_live_departures_data = []
您正在覆盖导入的 JSON 数据。
这意味着当您使用
snav_live_departures_data['data']['departures']
要访问数据,您实际上是在尝试访问[]
. 这显然会导致上述错误。
推荐阅读
- python - pandas df 按列表屏蔽特定行
- algorithm - 为什么 Kruskal 算法必须迭代所有边?
- asp.net-core - AutoMapper 从父类型属性分配属性
- python - 如何将两个表合二为一?
- javascript - 使用按钮将表格行的数据发送到服务器。我正在使用数据表
- qt - 如何让 QTableWidge 根据其内容调整大小
- oracle - 编写一个不带参数 Ins_Job 的 PL/SQL 过程,在表 JOBS 中插入新记录
- python - 在熊猫中删除过滤的行
- single-page-application - 使用谷歌标签管理器为 SPA 安装 GA4 但字段页面不起作用
- python - Visual Studio Code、ReStructurdText 扩展找不到 Python