Python加载JSON文件时如何处理导致JSONDecodeError的多余[]字符?
解决JSONDecodeError及JSONL文件加载问题
看来你遇到的是典型的JSON格式损坏+JSONL文件加载方式不对的问题,我来一步步帮你解决:
1. 先修复文件中的格式错误
你提到的][是明显的语法错误,应该替换成}, {来衔接两个推文对象。可以用这个简单的Python脚本批量修复:
# 修复损坏的JSON格式 input_path = 'tweets_036.jsonl' output_path = 'fixed_tweets_036.jsonl' with open(input_path, 'r', encoding='utf-8') as in_file, open(output_path, 'w', encoding='utf-8') as out_file: # 读取整个文件内容 raw_content = in_file.read() # 替换错误的 ][ 为正确的 }, { fixed_content = raw_content.replace('][', '}, {') # 写入修复后的文件 out_file.write(fixed_content)
2. 正确加载修复后的文件
注意:.jsonl格式是每行一个独立的JSON对象,直接用json.load()加载整个文件会报错(除非文件本身是一个完整的JSON数组)。根据你的数据情况,分两种加载方式:
方式A:如果修复后是完整的JSON数组
如果修复后的文件是一个包裹在[]里的完整数组(比如开头是[,结尾是],中间是用逗号分隔的对象),可以直接用json.load():
import json with open('fixed_tweets_036.jsonl', 'r', encoding='utf-8') as json_file: data = json.load(json_file)
方式B:标准JSONL格式加载(推荐)
如果你的文件是标准JSONL(每行一个推文对象),应该逐行读取解析:
import json data = [] with open('fixed_tweets_036.jsonl', 'r', encoding='utf-8') as json_file: for line in json_file: # 跳过空行,避免解析错误 cleaned_line = line.strip() if cleaned_line: tweet = json.loads(cleaned_line) data.append(tweet)
为什么原来的代码会报错?
json.load()是用来解析单个JSON对象或数组的,而JSONL文件是多行独立JSON,直接加载会触发格式错误;- 加上文件本身存在
][的语法错误,导致整个内容无法被解析为合法的JSON结构。
内容的提问来源于stack exchange,提问作者tezzaaa
相关产品推荐
相关产品推荐

