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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:59:46