Python加载JSON文件报错求助:提取followers_count与likes数据
解决JSON加载错误并提取指定字段的方案
嘿,我来帮你搞定这个问题!咱们先把json.loads()的加载错误搞定,再一步步实现多文件的字段提取。
一、先修正JSON加载的错误
很多人会搞混json.load()和json.loads()的用法,这大概率是你出错的原因:
json.loads()是用来解析JSON格式的字符串的- 如果你要直接读取本地JSON文件,应该用
json.load(),它接受一个文件对象作为参数
给你个正确加载单个JSON文件的示例:
import json # 打开文件并加载(用with语句自动管理文件关闭) with open("你的推文文件.json", "r", encoding="utf-8") as f: try: tweets_data = json.load(f) except json.JSONDecodeError as e: print(f"文件解析出错啦:{e}")
如果还是报错,大概率是JSON文件本身格式有问题(比如末尾多了逗号、引号不匹配),可以用Python自带的json.tool工具检查:
python -m json.tool 你的推文文件.json
工具会直接指出格式错误的位置,方便你修正。
二、提取followers_count和likes字段
假设你的JSON文件里是一个包含多个推文对象的列表(或者单个推文对象),可以这样安全提取字段:
# 假设tweets_data是加载后的推文列表 extracted_data = [] for tweet in tweets_data: # 用get方法避免字段不存在时报错,返回None或者你指定的默认值 follower_count = tweet.get("followers_count") likes = tweet.get("likes", 0) # 如果likes字段缺失,默认给0 extracted_data.append({ "followers_count": follower_count, "likes": likes }) # 查看提取结果 print(extracted_data)
三、批量处理多个JSON文件
如果要一次性处理目录下的所有JSON文件,可以结合os模块遍历:
import os import json # 替换成你的推文文件所在目录 target_dir = "推文存储目录" all_extracted_data = [] for filename in os.listdir(target_dir): if filename.endswith(".json"): file_path = os.path.join(target_dir, filename) with open(file_path, "r", encoding="utf-8") as f: try: tweets_data = json.load(f) # 重复提取字段的逻辑 for tweet in tweets_data: follower_count = tweet.get("followers_count") likes = tweet.get("likes", 0) all_extracted_data.append({ "来源文件": filename, "followers_count": follower_count, "likes": likes }) except Exception as e: print(f"处理文件{filename}时出错:{e}") # 把提取的结果保存成新的JSON文件,方便后续查看 with open("推文字段汇总.json", "w", encoding="utf-8") as f: json.dump(all_extracted_data, f, ensure_ascii=False, indent=2)
补充:如果是JSON Lines格式的推文文件
有些推文数据集会用每行一个推文对象的格式(后缀常为.jsonl),这时候不能直接用json.load(),得逐行解析:
with open("推文文件.jsonl", "r", encoding="utf-8") as f: for line in f: line = line.strip() if line: # 跳过空行 try: tweet = json.loads(line) # 提取字段的逻辑和上面一致 follower_count = tweet.get("followers_count") likes = tweet.get("likes", 0) # ... except json.JSONDecodeError as e: print(f"解析行出错:{e}")
内容的提问来源于stack exchange,提问作者JeBo
相关产品推荐
相关产品推荐

