如何编写通用函数为JSON中所有字符串移除其中包含的#符号
实现思路
- 由于JSON的基础数据类型只有字符串、数字、布尔值、null、对象、数组6种,只需递归遍历所有节点,按类型分别处理即可适配任意JSON结构:
- 遇到字符串类型:执行指定的字符替换逻辑,移除所有#后返回
- 遇到数组类型:遍历每一个元素,递归调用处理函数后返回新数组
- 遇到对象类型:遍历所有键值对,对值递归调用处理函数后返回新对象
- 遇到数字、布尔值、null类型:直接返回原值即可
注意:以下实现默认仅处理JSON的值,若需要同时移除键名中的#,修改对应字典/对象键的生成逻辑,对键也执行字符串处理即可
代码实现
Python 版本
import json def process_json(value, str_handler=lambda s: s.replace("#", "")): # 处理字符串 if isinstance(value, str): return str_handler(value) # 处理数组 elif isinstance(value, list): return [process_json(item, str_handler) for item in value] # 处理对象 elif isinstance(value, dict): # 需要处理键的话,将key改为str_handler(key)即可 return {key: process_json(val, str_handler) for key, val in value.items()} # 其他类型直接返回 else: return value # 调用示例 if __name__ == "__main__": # 读取并解析JSON字符串 raw_json_str = """你的原始JSON字符串""" raw_data = json.loads(raw_json_str) # 执行处理 processed_data = process_json(raw_data) # 输出处理后的JSON字符串 print(json.dumps(processed_data, indent=2, ensure_ascii=False))
JavaScript 版本
function processJson(value, strHandler = (s) => s.replaceAll("#", "")) { // 处理字符串 if (typeof value === "string") { return strHandler(value); } // 处理数组 if (Array.isArray(value)) { return value.map(item => processJson(item, strHandler)); } // 处理对象 if (typeof value === "object" && value !== null) { const result = {}; // 需要处理键的话,将key改为strHandler(key)即可 for (const key in value) { if (Object.prototype.hasOwnProperty.call(value, key)) { result[key] = processJson(value[key], strHandler); } } return result; } // 其他类型直接返回 return value; } // 调用示例 const rawJsonStr = `你的原始JSON字符串`; const rawData = JSON.parse(rawJsonStr); const processedData = processJson(rawData); console.log(JSON.stringify(processedData, null, 2));
扩展说明
该实现为通用逻辑,若后续需要修改字符串处理规则(比如替换其他字符、新增前缀等),仅需修改传入的字符串处理函数参数即可,无需调整递归遍历逻辑,可适配任意结构的JSON数据。
内容的提问来源于stack exchange,提问作者dfvt
相关产品推荐
相关产品推荐

