读取Twitter导出的JSON格式TXT文件时遇JSONDecodeError求助
解决Twitter JSON文件加载时的JSONDecodeError问题
嘿,我一眼就看出问题所在了——你的Twitter数据文件采用的是**JSON Lines(每行一个独立JSON对象)**格式,而不是标准的单个JSON数组结构。当你用json.loads()读取整个文件的字符串内容时,多个独立的JSON对象连在一起,不符合JSON的语法规范,所以解析器会抛出"Extra data"的错误。
问题根源拆解
从你给出的文件示例能看到,每一行都是一个完整的推文JSON对象,但整个文件并没有被方括号[]包裹成数组。json.loads()只能解析单个JSON对象或者一个完整的JSON数组,当它读完第一行的JSON后,遇到第二行开头的{,就会判定这是多余的数据,直接报错。
两种靠谱的解决方案
方案1:逐行读取并解析(手动控制更灵活)
你可以逐行读取文件,每行单独解析成JSON对象,再把这些对象收集起来转换成DataFrame:
import json import pandas as pd tweets_list = [] file_path = files_path + '/tweets.json.2019-01-15.txt' with open(file_path, 'r', encoding='utf-8') as f: for line in f: # 跳过可能存在的空行 cleaned_line = line.strip() if not cleaned_line: continue # 解析单行JSON tweet_obj = json.loads(cleaned_line) tweets_list.append(tweet_obj) # 转换成DataFrame tweet_df = pd.DataFrame(tweets_list) print(tweet_df.head())
方案2:用pandas直接读取(更简洁高效)
pandas原生支持JSON Lines格式的文件,只需要给read_json()加上lines=True参数就行,一行代码搞定:
import pandas as pd tweet_df = pd.read_json(files_path+'/tweets.json.2019-01-15.txt', lines=True) print(tweet_df.head())
额外小技巧:处理格式错误的行
如果你的文件里有少数格式错误的行(比如残缺的JSON),可以加个异常处理跳过这些行,避免程序直接崩溃:
import json import pandas as pd tweets_list = [] file_path = files_path + '/tweets.json.2019-01-15.txt' with open(file_path, 'r', encoding='utf-8') as f: for line_num, line in enumerate(f, start=1): cleaned_line = line.strip() if not cleaned_line: continue try: tweet_obj = json.loads(cleaned_line) tweets_list.append(tweet_obj) except json.JSONDecodeError as e: print(f"警告:第{line_num}行解析失败,错误信息:{e},已跳过该行") tweet_df = pd.DataFrame(tweets_list)
内容的提问来源于stack exchange,提问作者Chen Vilinsky
相关产品推荐
相关产品推荐

