定义字典路径为变量时触发TypeError: string indices must be integers错误求助
问题解决:TypeError: string indices must be integers
错误根源
你定义的变量x = ['Something 1'][0]['ID']逻辑错误:
['Something 1'][0]得到的是字符串"Something 1"- 对字符串用
['ID']索引,就会触发TypeError,因为字符串的索引只能是整数(比如[0]取第一个字符)
而直接写data['Something 1'][0]['ID']能生效,是因为你在逐层访问JSON的多层结构:先取字典的Something 1键(得到列表),再取列表的第0个元素(得到子字典),最后取子字典的ID键。
解决方案
把路径拆成包含层级的列表,修改函数实现多层路径的导航:
修改后的完整代码
import json def updateJson(fileName, pathToValue, updatedValue): # 用with语句安全读取文件,自动关闭 with open(fileName) as f: data = json.load(f) # 逐层导航到目标节点 current_node = data # 遍历路径的前n-1个节点,定位到父级 for key in pathToValue[:-1]: current_node = current_node[key] # 修改目标节点的值 current_node[pathToValue[-1]] = updatedValue # 写入修改后的JSON,加indent让格式更清晰 with open("template3.json", "w") as outfile: json.dump(data, outfile, indent=4) # 用列表存储多层路径:字典键→列表下标→字典键 x = ['Something 1', 0, 'ID'] updateJson("Temp\\random.json", x, 9)
代码说明
- 路径变量
x用列表存储所有层级的访问键/下标,对应JSON的结构:'Something 1'是顶层字典的键,0是列表的下标,'ID'是子字典的键 - 函数里通过循环逐层访问到目标节点的父级,最后修改目标键的值
- 改用
with语句处理文件,避免手动关闭文件时的潜在问题 json.dump添加indent=4,让输出的JSON保持格式化,可读性更强
内容的提问来源于stack exchange,提问作者The One
相关产品推荐
相关产品推荐

