Python读取含字典的嵌套列表文本文件并解决JSONDecodeError问题
读取转换Python字面量格式嵌套列表的解决方法
报错原因
你遇到的JSON解析错误来自两个核心问题:
- 你调用
readlines()后仅取了索引为0的第一行内容,仅拿到了开头的[[,剩下的嵌套结构都没有读取到,解析的字符串本身就不完整 - 你的文件内容是Python字面量格式,其中的
None是Python专属的空值标识,JSON标准中对应的空值是null,仅替换单引号也无法完成解析
最优解决方案:使用ast.literal_eval解析
Python标准库的ast.literal_eval可以安全解析Python字面量结构(字典、列表、元组、字符串、数字、None、布尔值等),不需要做任何字符替换,适配你当前的文件格式,代码如下:
import ast with open('case1-gather_results.txt', 'r', encoding='utf-8') as f: # 直接读取整个文件的全部内容 file_content = f.read() # 直接解析得到嵌套列表对象 result = ast.literal_eval(file_content) print(result)
备选方案:兼容json.loads的实现
如果一定要用json模块解析,需要先读取完整文件内容,再做两处字符替换:
import json with open('case1-gather_results.txt', 'r', encoding='utf-8') as f: file_content = f.read() # 替换单引号为双引号,同时替换Python的None为JSON兼容的null json_compatible_str = file_content.replace("'", '"').replace('None', 'null') result = json.loads(json_compatible_str) print(result)
注意:该方案存在副作用风险,如果你存储的字典值中本身包含
'None'字符串或者含单引号的内容,替换操作会破坏原始数据,因此优先选择ast方案。
内容的提问来源于stack exchange,提问作者User27854
相关产品推荐
相关产品推荐

