如何向现有JSON数组添加新值?解决KeyError: 'responses'报错
解决KeyError: 'responses'的问题
嘿,这问题我一眼就看出来啦!你代码里的错误根源是访问了不存在的顶级键data['responses']——你的JSON结构里,responses是嵌套在intents数组的每个单个意图对象里的,不是根对象data的直接属性,所以直接取data['responses']肯定会报错。
修正后的代码
我们只需要在找到匹配tag的意图对象后,直接操作这个对象的responses数组就行,另外还要注意filename变量要和读取的文件名对应:
import json from flask import request # 假设你用的是Flask,根据实际场景调整 tgname = request.form['tags'] x = request.form['newres'] filename = 'intents.json' # 明确定义要操作的文件名 with open(filename, 'r') as file: data = json.load(file) # 遍历意图数组,定位到目标tag对应的对象 intent_found = False for t in data["intents"]: if t['tag'] == tgname: t['responses'].append(x) # 直接操作当前意图对象的responses数组 intent_found = True break # 找到目标后立即退出循环,提升效率 # 可选:如果没找到对应tag,给出调试提示 if not intent_found: print(f"Tag '{tgname}' 未在intents.json中找到") with open(filename, 'w') as f: json.dump(data, f, indent=4) # 加indent让JSON保持格式化,可读性更好,可选
额外小提示
- 如果是要添加新的
pattern,只需要把t['responses'].append(x)改成t['patterns'].append(x)就行 - 新增的
intent_found判断能帮你避免:当传入的tag不存在时,代码静默执行却没做任何修改的情况,方便调试
内容的提问来源于stack exchange,提问作者Vaishali Ravindran
相关产品推荐
相关产品推荐

