Python requests调用POE API返回JSON异常,索引访问报错求助
解决Path of Exile交易API的JSON解析与索引错误问题
你遇到的问题其实分两个独立的部分,咱们一个个拆解解决:
一、JSON校验工具报错的原因
你把Python打印的parsed_data输出复制到jsonlint时出错,本质是Python的字典格式和标准JSON不是一回事。Python打印字典/列表时用的是单引号,但JSON规范强制要求用双引号,所以直接复制Python的输出到JSON校验工具,肯定会触发语法错误。
正确的校验姿势:
- 打印服务器返回的原始JSON字符串:直接用
print(r.text),复制这个输出去校验才是准确的 - 或者用
json.dumps(parsed_data, indent=2)把Python对象转成标准JSON格式字符串,再复制去校验
二、TypeError的核心解决方法
你碰到的TypeError: list indices must be integers or slices, not str,是因为parsed_data['result']是一个列表(数组),而不是你以为的字典。Path of Exile的trade/fetch接口返回的result字段天生就是包含交易条目的数组(哪怕只有一个结果),所以你不能直接用字符串索引去访问它的子元素。
修正步骤:
- 先确认
result列表里有内容(避免索引越界) - 用整数索引(比如
[0]取第一个元素)定位到具体的交易条目,再访问listing和whisper
另外补充一点:POE的API对请求头有要求,默认的requests请求头会被识别为非浏览器请求,可能导致返回异常内容,所以最好带上模拟浏览器的User-Agent请求头。
修正后的完整代码
import json import requests item_data_api = "https://www.pathofexile.com/api/trade/fetch/e6c3075c2bea510e868dd9568930c74cfd7d926e2dc74dd12b1119ecb565b3ff" # 模拟浏览器请求头,避免被服务器拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } r = requests.get(item_data_api, headers=headers) if r.status_code == 200: # 打印原始响应JSON,方便校验 print("原始响应JSON:") print(r.text) parsed_data = r.json() # 检查result列表是否有有效内容 if parsed_data.get('result') and len(parsed_data['result']) > 0: # 取第一个交易条目 first_trade = parsed_data['result'][0] whisper_msg = first_trade['listing']['whisper'] print("\n whisper消息内容:") print(whisper_msg) else: print("未找到任何交易条目") else: print(f"请求失败,状态码:{r.status_code}")
额外小提示
- POE交易API有调用频率限制,别频繁请求,小心被封IP
- 如果要处理多个交易结果,直接用
for item in parsed_data['result']:循环遍历就行 - 建议查一下POE官方的交易API文档,明确返回结构的细节,避免再踩类似的索引坑
内容的提问来源于stack exchange,提问作者CayoM
相关产品推荐
相关产品推荐

