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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:05:16