Python从API JSON提取order_id时如何避免KeyError?
解决API JSON中order_id字段缺失的KeyError问题
在提取外勤人员与客户交互的API JSON数据时,部分交互记录未生成订单,因此不存在order_id字段,直接通过item['order_id']访问会触发KeyError。以下是几种可行的解决方法,核心是给缺失的order_id设置默认值None:
方法1:使用字典get()方法(最简洁)
字典的get()方法可指定键不存在时的默认值,直接替换原取值方式即可:
import requests import json r = requests.get(baseurl + endpoint + '?page_number=1' + '&page_size=2', headers=headers) output = r.json() interactions_list = [] for item in output['data']: columns = { 'id': item['id'], 'number': item['user_id'], 'name': item['user_name'], 'order': item.get('order_id', None) # 用get方法设置默认值None } interactions_list.append(columns) print(interactions_list)
运行示例结果(假设其中一条无order_id):
[{'id': 1, 'number': 6, 'name': 'Johnny', 'order': 1001}, {'id': 2, 'number': 7, 'name': 'David', 'order': None}]
方法2:显式判断字段是否存在
如果需要更直观的逻辑,可先判断order_id是否在item的键集合中,再赋值:
import requests import json r = requests.get(baseurl + endpoint + '?page_number=1' + '&page_size=2', headers=headers) output = r.json() interactions_list = [] for item in output['data']: columns = { 'id': item['id'], 'number': item['user_id'], 'name': item['user_name'], } # 判断order_id是否存在 if 'order_id' in item: columns['order'] = item['order_id'] else: columns['order'] = None interactions_list.append(columns) print(interactions_list)
方法3:捕获KeyError异常
如果场景中可能存在其他键的缺失问题,也可以用异常捕获的方式处理:
import requests import json r = requests.get(baseurl + endpoint + '?page_number=1' + '&page_size=2', headers=headers) output = r.json() interactions_list = [] for item in output['data']: columns = { 'id': item['id'], 'number': item['user_id'], 'name': item['user_name'], } try: columns['order'] = item['order_id'] except KeyError: columns['order'] = None interactions_list.append(columns) print(interactions_list)
以上三种方法都能解决字段缺失的问题,其中方法1的get()方法是处理这类字典键缺失场景的最优选择,代码简洁且可读性强。
内容的提问来源于stack exchange,提问作者Ed Vermaak
相关产品推荐
相关产品推荐

