我一直在玩Python从jsonapi抓取和解析数据,具体来说,我正在使用CTA(芝加哥交通管理局)Train Tracker API。你知道吗
当存在多个“train”运行数组而不是单个“train”运行数组时,我会定期收到一个TypeError: string indices must be integers
跟踪到。单个运行不在运行数组中。你知道吗
{'ctatt':
{'tmst': '2018-03-05T01:59:10',
'errCd': '0',
'errNm': None,
'route': [{'@name': 'g'},
{'@name': 'y',
'train': {'rn': '030',
.....
'heading': '302'},
{'@name': 'blue',
'train': [{'rn': '125',
.....
'heading': '302'},
{'rn': '127',
.....
'heading': '278'},
“g”路由没有运行实例。 “y”路线有1条路线。你知道吗
'train': {'rn':}
“蓝色”路线有多条路线。你知道吗
'train': [{'rn': ...},{'rn': ...},{'rn': ...}]
我用来解析的代码处理了缺少运行和多次运行的问题。它以1次运行命中TypeError
。你知道吗
for train_rt in trains_data['ctatt']['route']:
line_name = train_rt['@name']
if train_rt.get('train', 'None') != 'None':
for train_run in train_rt['train']:
处理不在阵列中的单个运行的最佳方法是什么?你知道吗
2 Yellow Line Runs in Chrome: Dev Tools: Network: Preview
1 Yellow Line Run in Chrome: Dev Tools: Network: Preview
我注意到的一个不一致之处是,如果我查询单个路由,这些路由仍然位于一个由1个路由组成的数组中。你知道吗
您有两种选择:
isinstance()
显式测试列表或字典try:...except
中并捕获TypeError
,然后继续将其作为单个元素处理。你知道吗你选择哪一种并不重要(但是有can be a performance difference),选择你认为最适合你的代码的样式。你知道吗
例如,如果使用
isistance()
测试,可以在单个元素周围添加一个列表,这样代码的其余部分就不必更改:请注意,如果缺少
'train'
键,则上述代码将使用空列表再次正常化。这允许您避免另一个if
测试,因为现在for
循环根本不会迭代。你知道吗如果您有该API的支持联系人,我至少会报告这个问题,并指出它们的数据结构不一致。你知道吗
相关问题 更多 >
编程相关推荐