调用REST API提取指定字段报错:TypeError问题求助
问题解决:REST API响应解析与字段提取错误修复
问题场景
调用REST API时,需从适配器输出中提取OUT_Detailed Description和OUT_Vendor Ticket Number两个字段赋值给变量,但运行代码触发TypeError,同时存在字段提取失败问题。
错误原因
- 参数类型错误:
json.loads()传入了requests的Response对象,而非JSON字符串或字节流,该方法仅接受可解析的JSON格式字符串/字节。 - 字段名拼写错误:代码中误写为
OUT_Detailed Decription(多了一个字母c),与API返回的字段名OUT_Detailed Description不匹配。 - 响应结构处理错误:API返回的是数组格式的JSON,而非直接的键值对对象,无法通过键名直接取值。
修正后的代码
import requests import json # 假设authToken和get_query_inc_json()已正确定义 headers = {'content-type': 'application/json', 'Authentication-Token': authToken} response = requests.post( 'http://dev.startschools.local:2031/baocdp/rest/process/:ITSM_Interface:IncidentManagement:QueryIncident/execute', headers=headers, data=json.dumps(get_query_inc_json()) ) # 直接用response.json()解析响应为Python列表 response_data = response.json() # 初始化变量 Description = None Ref_Number = None # 遍历数组提取目标字段 for item in response_data: if item['name'] == 'OUT_Detailed Description': Description = item['value'] elif item['name'] == 'OUT_Vendor Ticket Number': Ref_Number = item['value'] # 验证结果 print(f"详细描述: {Description}") print(f"厂商工单编号: {Ref_Number}")
关键修正说明
- 使用
response.json():requests库内置方法,自动处理响应的JSON解析,无需手动调用json.loads(response.text),避免类型错误。 - 遍历响应数组:API返回的是包含多个字段对象的数组,通过循环匹配
name字段,提取对应的value值。 - 修正字段名拼写:将错误的
OUT_Detailed Decription改为正确的OUT_Detailed Description,确保字段匹配成功。
内容的提问来源于stack exchange,提问作者Dinerz
相关产品推荐
相关产品推荐

