如何用Python将文本文件内容替换为JSON嵌套字典的指定字段值
Python实现JSON嵌套字段替换方案
现有代码问题
- 路径拼接逻辑错误:已定义的路径变量是文件所在目录,原有代码重复拼接路径会生成非法路径,无法正常读取文件
- 读取的文本内容为字符串格式,未转换为可直接赋值的列表对象
- 无需嵌套循环遍历字段,直接定位目标字段赋值即可
- 缺少修改后JSON内容回写文件的步骤
完整可运行代码
import json import os import ast def replace_cc_field(text_file_name, json_file_name): # 读取文本文件内容 text_base_dir = "C:/Documents/" text_full_path = os.path.join(text_base_dir, text_file_name) with open(text_full_path, "r", encoding="utf-8") as f: raw_text = f.read().strip() # 将字符串格式的列表转换为Python列表,并将元素转为字符串匹配原JSON格式 target_list = ast.literal_eval(raw_text) str_target_list = [str(item) for item in target_list] # 加载JSON文件为字典对象 json_base_dir = "C:/Documents/" json_full_path = os.path.join(json_base_dir, json_file_name) with open(json_full_path, "r", encoding="utf-8") as f: json_data = json.load(f) # 直接替换目标字段 json_data["aa"]["cc"] = str_target_list # 把修改后的内容写回JSON文件,indent参数保证格式美观 with open(json_full_path, "w", encoding="utf-8") as f: json.dump(json_data, f, ensure_ascii=False, indent=4) # 调用示例,按实际文件名修改参数即可 if __name__ == "__main__": replace_cc_field("file.txt", "file.json")
注意事项
- 确保文本文件中存储的列表格式合法,
ast.literal_eval可以安全转换符合Python字面量格式的字符串,相比eval没有执行恶意代码的风险 - 如果JSON的层级结构有变动,修改
json_data["aa"]["cc"]对应的层级即可
内容的提问来源于stack exchange,提问作者Hiwot
相关产品推荐
相关产品推荐

