You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定义字典路径为变量时触发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)

代码说明

  1. 路径变量x用列表存储所有层级的访问键/下标,对应JSON的结构:'Something 1'是顶层字典的键,0是列表的下标,'ID'是子字典的键
  2. 函数里通过循环逐层访问到目标节点的父级,最后修改目标键的值
  3. 改用with语句处理文件,避免手动关闭文件时的潜在问题
  4. json.dump添加indent=4,让输出的JSON保持格式化,可读性更强

内容的提问来源于stack exchange,提问作者The One

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:20:57