Python开发Discord BOT调用Enjin API打印JSON数据报错问题
解决Enjin API返回数据索引的TypeError问题
嘿,我之前对接第三方API时也踩过类似的结构坑,给你分析下怎么解决~
你遇到的TypeError: list indices must be integers or slices, not str,说白了就是你试图用字符串键去访问一个列表类型的数据。虽然print(Data)能输出全部内容,但Enjin API返回的JSON结构里,variables_values大概率不是直接在顶层字典里,而是嵌套在某个列表元素中。
第一步:先搞清楚返回数据的真实结构
你可以用更清晰的方式打印数据,比如用pprint模块格式化输出,或者先检查数据类型:
import pprint # 格式化打印,能看清嵌套层级 pprint.pprint(Data) # 检查顶层数据类型 print(type(Data)) # 如果输出是<class 'list'>,说明顶层是列表
举个常见的Enjin API返回结构例子(仅作参考):
# 可能的返回结构 Data = [ { "variables_values": {"key1": "value1", "key2": "value2"}, "other_field": "xxx" } ]
这种情况下,你直接写Data["variables_values"]肯定报错,因为Data是列表,得先通过整数索引拿到里面的字典,再取键。
第二步:调整索引方式访问variables_values
根据结构调整代码,比如如果顶层是列表,取第一个元素再访问键:
# 先判断列表不为空,再取值(避免索引越界) if isinstance(Data, list) and len(Data) > 0: # 取列表第一个元素里的variables_values variables_values = Data[0].get("variables_values") print(variables_values) else: print("未找到有效的variables_values数据")
用get()方法代替直接索引["variables_values"],还能避免因为键不存在抛出KeyError,更稳健。
为什么之前的Status函数能正常工作?
因为你之前调用的其他API返回的顶层结构是字典,直接用字符串键访问没问题,但Enjin API的返回结构多了一层列表嵌套,所以索引方式得跟着变~
内容的提问来源于stack exchange,提问作者James Smith
相关产品推荐
相关产品推荐

