Laravel(PHP)中如何从嵌套JSON删除指定ID节点及其子节点
删除嵌套JSON数组中指定ID的节点及其子节点
针对你这个需求,我给你两种主流编程语言的实现方案,都是通过递归处理嵌套结构,确保彻底删除目标节点及其所有子节点:
JavaScript 实现
function removeNodeById(arr, targetId) { // 过滤顶层数组,同时递归处理子节点 return arr.filter(item => { // 匹配到目标ID,直接排除该节点 if (item.id === targetId) return false; // 如果有子节点数组,递归清理子节点中的目标ID if (item.children && Array.isArray(item.children)) { item.children = removeNodeById(item.children, targetId); } return true; }); } // 你的原始数据 const originalData = [{"id":3},{"id":4,"children":[{"id":5,"children":[{"id":6}]}]}]; // 执行删除操作 const result = removeNodeById(originalData, 4); console.log(result); // 输出: [{"id":3}]
逻辑说明
- 用
filter方法遍历顶层数组,直接剔除ID匹配的节点 - 对保留的节点,若存在
children数组则递归调用函数,确保深层嵌套的目标节点也能被清理 - 该方法返回新数组,不会修改原始数据,避免意外副作用
Python 实现
def remove_node_by_id(arr, target_id): processed_arr = [] for item in arr: # 跳过目标ID的节点 if item['id'] == target_id: continue # 递归处理子节点数组 if 'children' in item and isinstance(item['children'], list): item['children'] = remove_node_by_id(item['children'], target_id) processed_arr.append(item) return processed_arr # 原始数据 original_data = [{"id":3},{"id":4,"children":[{"id":5,"children":[{"id":6}]}]}] # 执行删除操作 result = remove_node_by_id(original_data, 4) print(result) # 输出: [{'id': 3}]
注意点
- 假设你的JSON结构中每个节点的
id是唯一的,如果存在重复ID,该方法会删除所有匹配的节点 - 如果需要直接修改原始数据而非返回新数组,可以调整代码逻辑,但通常不推荐这种做法,容易引发数据混乱
内容的提问来源于stack exchange,提问作者i1919
相关产品推荐
相关产品推荐

