如何在Python中替换未知结构JSON文件中的指定字符串值?
解决JSON任意结构下替换指定字符串值的问题
没问题,这个需求其实可以通过递归遍历+类型判断来解决,完全不用提前摸清JSON的结构~核心思路就是不管遇到字典还是列表,都一层层钻进去检查每个值,碰到是"REPLACE_ME"的就替换成你要的自定义字符串。
具体实现方案
我们可以写一个递归函数,自动处理所有嵌套的JSON结构(字典、列表,甚至多层嵌套的组合):
import json def replace_placeholder(data, replacement_str): if isinstance(data, dict): # 遍历字典的每个键值对,递归处理对应的值 return {key: replace_placeholder(value, replacement_str) for key, value in data.items()} elif isinstance(data, list): # 遍历列表的每个元素,递归处理每个元素 return [replace_placeholder(item, replacement_str) for item in data] elif isinstance(data, str) and data == "REPLACE_ME": # 匹配到目标占位符,替换为自定义字符串 return replacement_str else: # 其他类型(数字、布尔值、None等)直接返回原内容 return data # 实际使用示例 if __name__ == "__main__": # 读取目标JSON文件 with open("your_input.json", "r", encoding="utf-8") as f: original_data = json.load(f) # 替换所有"REPLACE_ME"为你的自定义字符串,比如"hello_world" updated_data = replace_placeholder(original_data, "hello_world") # 将修改后的数据写入新文件(也可以覆盖原文件) with open("your_output.json", "w", encoding="utf-8") as f: json.dump(updated_data, f, indent=4, ensure_ascii=False)
代码说明
- 递归遍历:函数会自动深入到JSON的每一层,不管是字典里的嵌套字典,还是列表里的嵌套列表,都能遍历到所有值。
- 类型判断:针对不同的JSON类型(字典、列表、字符串、基础类型)做不同处理,确保只替换符合条件的字符串值。
- 保留原格式:写回文件时用
indent=4保持JSON的格式化可读性,ensure_ascii=False支持中文等非ASCII字符。
额外提示
- 如果需要替换其他占位符,只需要修改
data == "REPLACE_ME"这一行的字符串即可。 - 如果不想创建新文件,直接覆盖原文件的话,只需要把写入的文件名改成和读取的一致即可(注意备份原文件,避免意外)。
内容的提问来源于stack exchange,提问作者s g
相关产品推荐
相关产品推荐

