Discord Bot解析JSON遇KeyError:如何获取嵌套JSON字段值?
解决Discord Bot中JSON嵌套字段提取的KeyError问题
问题根源
你触发KeyError是因为直接去取message字段,但它根本不在JSON的最外层——它藏在type下面的overall子对象里,跳层级访问肯定找不到。
正确提取方式
用json.loads()解析完JSON字符串后,得一层一层往下找对应的键:
示例代码
import json # 假设这是你收到的JSON字符串(注意去掉原JSON里末尾多余的逗号,不然解析会报错) json_str = '{"type":{"overall":{"message":1111111111}}}' # 把字符串转成Python字典 data = json.loads(json_str) # 逐层获取message的值 message_num = data["type"]["overall"]["message"] print(message_num) # 会输出1111111111
防报错小技巧
要是怕某个层级的键可能不存在(比如接口返回格式变了),可以用dict.get()方法,这样不会触发KeyError,还能设置默认值:
# 要是type或overall不存在,就返回0(默认值可以自己修改) message_num = data.get("type", {}).get("overall", {}).get("message", 0)
注意点
- 别跳过中间层级直接写
data["message"],最外层根本没这个键,肯定报错。 - 原JSON里
message:1111111111,后面多了个逗号,实际使用时要删掉,不然json.loads()会直接抛出JSONDecodeError。
内容的提问来源于stack exchange,提问作者bonx
相关产品推荐
相关产品推荐

