Python解析JSON遇json.decoder.JSONDecodeError无效控制字符问题求助
解决JSON解析中的无效控制字符错误
错误原因
json.decoder.JSONDecodeError: Invalid control character 表明你的server.txt文件包含JSON规范不允许的控制字符(如未转义的换行、制表符、或ASCII 0-31范围内的其他不可见字符),导致json.loads()无法正常解析文本内容。
解决方案
1. 定位问题字符
先打印出错位置附近的内容,明确是哪种无效字符导致的问题:
import json with open("C:\\Users\\75\\OneDrive\\PROJECT P1\\Work_1.0\\CBP\\server.txt", 'r') as f: data = f.read() # 输出出错位置前后的内容,范围可根据实际调整 print("出错位置附近内容:", data[110:140])
2. 清理无效控制字符并重新解析
使用正则表达式过滤或替换JSON不允许的控制字符,再进行解析:
import json import pprint import re # 匹配JSON规范禁止的控制字符(排除合法的\t\n\r\f\b) control_char_pattern = re.compile(r'[\x00-\x08\x0b\x0c\x0e-\x1f]') with open("C:\\Users\\75\\OneDrive\\PROJECT P1\\Work_1.0\\CBP\\server.txt", 'r') as f: raw_data = f.read() # 移除无效控制字符,也可根据需求替换为空格或转义符 cleaned_data = control_char_pattern.sub('', raw_data) try: json_data = json.loads(cleaned_data) except json.JSONDecodeError as e: print(f"解析失败: {e}") print("清理后出错位置附近内容:", cleaned_data[e.pos-20:e.pos+20]) exit() pprint.pprint(json_data) # 写入格式化后的JSON文件,with语句自动管理文件关闭 with open("converted.json", "w") as json_file: json_str = json.dumps(json_data, default=str, indent=4) json_file.write(json_str)
3. 特殊情况处理
如果原文件的转储数据是Python字典格式(而非严格JSON),可以用ast.literal_eval()替代json.loads(),它支持更多Python语法的字符串解析:
import ast # 替换原代码中的json.loads(cleaned_data)为: json_data = ast.literal_eval(cleaned_data)
额外注意
原代码中with块结束后手动调用f.close()是多余的,with语句会自动完成文件关闭操作,无需手动处理。
内容的提问来源于stack exchange,提问作者Tono Kuriakose
相关产品推荐
相关产品推荐

