Python实现JSON数组对象值递增并复制到新文件报错求助
问题分析与解决
错误原因
你的代码存在三个核心问题:
- 语法逻辑错误:
['title']是创建包含字符串"title"的列表,而非获取当前对象的title字段值,正确写法应为obj['title']。 - 类型不匹配:
title是字符串类型,无法直接与整数1执行加法运算;ref_internal和ref_external是字符串格式的数字,需先转换为整数才能完成递增操作。
- 复制逻辑缺失:未实现将修改后的数据复制n份的逻辑,仅遍历原始数据做修改。
修正后的代码示例
假设你需要基于原始JSON对象生成n份递增后的新数据,规则如下:
title在原字符串后添加递增序号(如"Reference Addition 1"、"Reference Addition 2"...)ref_internal和ref_external从原始数值开始依次递增
代码如下:
import json myfile = "your_file.json" # 替换为你的JSON文件路径 n = 5 # 替换为你需要复制的份数 # 读取原始数据 with open(myfile, 'r') as f: original_data = json.load(f) # 取第一个对象作为模板 template = original_data[0] # 生成n份递增后的新数据 new_data = [] for i in range(1, n+1): # 复制模板对象,避免修改原模板导致所有对象值一致 new_obj = template.copy() # 修改title:原标题后拼接递增序号 new_obj['title'] = f"{template['title']} {i}" # 修改ref_internal:字符串转整数后递增,再转回字符串(如需保持字符串类型) new_obj['ref_internal'] = str(int(template['ref_internal']) + i) # 修改ref_external:同上逻辑 new_obj['ref_external'] = str(int(template['ref_external']) + i) # 保留原ref_date,或按需修改 new_data.append(new_obj) # 保存到新文件 with open("new_data.json", 'w') as f: json.dump(new_data, f, indent=4)
关键说明
- 字符串格式化:使用f-string实现带递增序号的标题拼接,简洁直观;
- 类型转换:将字符串格式的数字转为整数完成递增,再按需转回字符串(JSON支持数字类型,若不需要字符串格式可直接保留整数);
- 对象复制:通过
copy()方法复制模板对象,确保循环中每个新对象独立; - JSON格式化:
json.dump()添加indent=4参数,让输出的JSON文件更易读。
可选调整
如果title的递增逻辑是修改标题中的数字部分(例如原标题为"Reference Addition 1"),可调整为:
# 拆分原标题提取数字部分 title_parts = template['title'].split() current_num = int(title_parts[-1]) # 替换数字并重组标题 new_obj['title'] = ' '.join(title_parts[:-1] + [str(current_num + i)])
内容的提问来源于stack exchange,提问作者user3130038
相关产品推荐
相关产品推荐

