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

将JSON转换为CSV时出现json.decoder.JSONDecodeError错误,使用errors='ignore'参数仍无法忽略JSON文件乱码问题

解决JSON转CSV时的JSONDecodeError问题

我明白你遇到的困扰了——虽然用了errors='ignore'试图跳过乱码,但还是触发了JSONDecodeError,核心原因是**errors='ignore'会直接丢弃非法UTF-8字节,这可能破坏了JSON的语法结构**(比如删掉了字符串的闭合引号、逗号等关键字符),导致JSON解析器无法识别完整的结构。

举个例子,你提供的JSON示例里的å­å¾·å是非法UTF-8序列,errors='ignore'会直接删掉这些字节,但如果刚好删掉了字符串结尾的引号,就会出现"Unterminated string"的错误。

解决方案:改用errors='replace'并优化代码

我们可以用errors='replace'把非法字符替换成�(不会破坏JSON结构),同时优化代码的文件管理和路径问题:

import csv
import json
import sys

def trans():
    # 注意:路径开头的‪是不可见的控制字符,要去掉!
    json_path = 'C:/Users/jeri/Desktop/1.json'
    csv_path = 'C:/Users/jeri/Desktop/1.csv'
    
    # 用with语句自动管理文件,避免手动close的问题
    with open(json_path, 'r', encoding='utf-8', errors='replace') as jsonData, \
         open(csv_path, 'w', encoding='utf-8', newline='') as csvfile:
        
        writer = csv.writer(csvfile, delimiter=',')
        flag = True
        
        for line in jsonData:
            # 先清理行首尾的空白字符(比如换行、空格)
            line = line.strip()
            if not line:
                continue
            try:
                dic = json.loads(line)
                if flag:
                    keys = list(dic.keys())
                    print(keys)
                    writer.writerow(keys)
                    flag = False
                # 处理null值,避免写入CSV时出现空值问题
                values = [v if v is not None else '' for v in dic.values()]
                writer.writerow(values)
            except json.JSONDecodeError as e:
                print(f"跳过解析失败的行:{line},错误信息:{e}")
                continue

if __name__ == '__main__':
    trans()

关键改进点说明:

  1. 替换errors='ignore'为errors='replace':
    这样非法字符会被替换成�,既保留了JSON的语法结构,又不会因为丢弃字节破坏字符串的完整性,JSON解析器就能正常解析。

  2. 清理路径中的隐藏字符:
    你的代码里路径开头有个不可见的控制字符‪,这会导致Python找不到文件,一定要删掉。

  3. 用with语句管理文件:
    不需要手动调用close(),Python会自动处理文件的打开和关闭,避免资源泄漏。

  4. 增加异常处理:
    对解析失败的行进行捕获和跳过,避免整个程序崩溃,同时打印错误信息方便排查。

  5. 处理null值:
    JSON中的null在CSV中会显示为空,我们可以显式替换成空字符串,让输出更规范。

测试你提供的JSON示例,用这个代码可以正常解析并生成CSV,乱码会被替换成�,但不会影响结构解析。

内容的提问来源于stack exchange,提问作者jeri teri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:57:36