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

Python JSON重复打印异常:二次调用section2内容出错

问题分析与解决方案

核心原因

你遇到的问题大概率是处理section2的代码意外修改了原始JSON解析后的可变对象(比如列表、字典),而section1和section3的打印逻辑没有修改原始数据,所以每次调用都正常。

举个典型场景:如果你的打印函数里直接操作了json_data['section2']这个列表(比如追加元素、拼接内容),第一次调用后原始数据已经被修改,第二次调用时就会基于修改后的数据打印,导致内容重复。

解决方案

1. 使用深拷贝隔离原始数据

每次打印section2前,对原始的section2数据做深拷贝,确保每次操作的都是独立副本,不会污染原始JSON数据:

import json
import copy

# 读取JSON文件(只做一次,避免重复读取)
with open("your_guide.json", "r", encoding="utf-8") as f:
    raw_json_data = json.load(f)

def print_section2():
    # 深拷贝section2数据,完全隔离原始对象
    section2_content = copy.deepcopy(raw_json_data["section2"])
    # 这里执行你的打印逻辑,比如遍历输出
    for item in section2_content:
        print(item["content"])  # 假设JSON结构是包含content字段的字典列表

# 首次调用
print_section2()
# 后续调用,原始数据未被修改,打印内容正常
print_section2()

2. 检查并移除修改原始数据的逻辑

排查你的打印函数,确认是否存在以下操作:

  • 直接向raw_json_data["section2"]列表追加元素
  • 修改section2内字典的字段值
  • 对section2列表执行extend()、+=等会修改原列表的操作

把这些操作改为在临时副本上执行,比如:

# 错误示例(会修改原始数据)
def bad_print_section2():
    # 直接操作原始列表,导致后续调用数据异常
    raw_json_data["section2"].append({"content": "重复内容"})
    for item in raw_json_data["section2"]:
        print(item["content"])

# 正确示例(使用临时副本)
def good_print_section2():
    # 创建临时副本,不影响原始数据
    temp_section2 = raw_json_data["section2"].copy()  # 浅拷贝如果足够的话,复杂结构用深拷贝
    # 临时操作副本
    temp_section2.append({"content": "临时内容"})
    for item in temp_section2:
        print(item["content"])

额外验证点

如果以上方案无效,可以:

  • 在每次打印section2前,打印raw_json_data["section2"]的长度或内容,确认原始数据是否被修改
  • 检查是否在其他函数中也操作了section2的原始数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:50:28