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

如何用Python检查JSON文件记录并避免重复写入?

解决JSON记录去重问题

我来帮你搞定这个去重的问题!你的现有代码核心问题在于直接追加JSON片段到文件,既没有读取已有的记录做检查,还会导致文件里出现多个独立的JSON结构(这其实是不合法的JSON格式),自然没法实现去重。下面给你一步步拆解解决方案:

核心思路

要实现去重,必须遵循「读→查→改→写」的流程:

  1. 先读取已有的JSON文件内容(如果文件不存在,就初始化一个空的结构)
  2. 遍历要添加的记录,检查每个id是否已经存在于现有记录中
  3. 只添加那些不存在的记录
  4. 把更新后的完整数据写回文件(注意是覆盖写入,不是追加)

修改后的完整代码

import json
import io

# 定义要处理的文件路径
file_path = 'data.json'

# 1. 读取现有数据,处理文件不存在的情况
try:
    with io.open(file_path, 'r', encoding='utf-8') as fp:
        try:
            existing_data = json.load(fp)
            # 确保insta列表存在,避免旧数据格式不一致
            if 'insta' not in existing_data:
                existing_data['insta'] = []
        except json.JSONDecodeError:
            # 如果文件是空的或者格式错误,初始化默认结构
            existing_data = {'insta': []}
except FileNotFoundError:
    # 文件不存在时初始化
    existing_data = {'insta': []}

# 2. 遍历要添加的记录,去重后添加
for f in unique_following:
    # 检查当前id是否已经存在于insta列表中
    is_exist = any(item['id'] == f for item in existing_data['insta'])
    if not is_exist:
        existing_data['insta'].append({'id': f, 'dm': False})
        print(f"添加新记录:{f}")
    else:
        print(f"记录已存在,跳过:{f}")

# 3. 把更新后的数据写回文件(覆盖写入,保证JSON格式合法)
with io.open(file_path, 'w', encoding='utf-8') as fp:
    json.dump(existing_data, fp, indent=1, ensure_ascii=False)

关键细节解释

  • 避免追加模式:原来的'a'模式会把新的JSON片段直接加到文件末尾,导致整个文件不是合法的JSON(比如会出现{"insta": [...]} {"insta": [...]} 这种结构),'w'模式覆盖写入能保证文件始终是一个完整的JSON对象。
  • 存在性检查:用any()配合生成器表达式,高效检查列表中是否已有相同id的记录,比遍历整个列表更简洁。
  • 异常处理:考虑了文件不存在、文件为空、JSON格式错误等边界情况,避免程序崩溃。

这样改完之后,就能确保每个id只会被添加一次,不会出现重复记录啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:33