You need to enable JavaScript to run this app. Python使用json.loads解析JSON字符串时报TypeError无法转为字典
优惠活动
大模型
产品
解决方案
定价
更多

Python使用json.loads解析JSON字符串时报TypeError无法转为字典

报错原因与修复方法

核心报错逻辑

你存储在check-deps.txt里的每一行内容,存在双层序列化问题,无法直接被解析为字典:

  • 可直接解析为字典的原生JSON行格式为:{"version":"1.4.12","name":"earmark_parser",...}
  • 你当前文件内的行格式为:"{\"version\":\"1.4.12\",\"name\":\"earmark_parser\",...}"

当对这类行调用json.loads时,解析器识别到行首、行尾的外层双引号,会把整行内容解析为一个纯字符串,而非字典。后续你用字符串键["version"]对该对象做索引时,就会触发TypeError: string indices must be integers——字符串仅支持整数类型的字符下标,不支持字符串键取值。

另外,通过readlines()读取的每行末尾会自带换行符\n,属于潜在的解析干扰项。

可直接运行的修复代码

import json

version_results = []
with open("check-deps.txt", "r") as f:
    for raw_line in f:
        # 去除行首尾空白、换行符
        trimmed_line = raw_line.strip()
        # 第一次解析:剥离外层包裹的字符串层,拿到内部的原生JSON文本
        inner_json_text = json.loads(trimmed_line)
        # 第二次解析:把原生JSON文本转换为字典
        dep_info = json.loads(inner_json_text)
        # 提取version字段
        ver = dep_info["version"]
        print(ver)
        version_results.append(ver)

格式根源

当前文件的双层序列化格式,是写文件阶段的操作误差导致的:本应直接把字典序列化后的JSON文本写入文件,实际操作中先把字典转成了字符串,又把这个字符串本身整体加引号写入文件,最终形成了外层多包一层双引号、内部引号全转义的格式。如果要从源头修正,只需要在最初写入文件时,直接将字典序列化的结果作为单行内容写入,不要额外包裹双引号即可。

内容的提问来源于stack exchange,提问作者Alan Hsieh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 00:27:04