You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于用户节点链提取JSON菜单结构节点并生成新JSON

从主JSON中按指定节点链提取对象

需求说明

根据用户传入的节点链列表,从给定的主JSON中筛选出对应节点,忽略未在输入中的节点,生成新的JSON对象。节点链中的.表示该节点包含子节点,需保留父节点及指定子节点的完整信息。

主JSON数据源

{
    "menustructure": [
        {
            "node": "Admin",
            "path": "admin",
            "child": [
                {
                    "node": "Admin.resouce1",
                    "path": "resouce1",
                    "rank": 1
                },
                {
                    "node": "Admin.resouce2",
                    "path": "oath",
                    "rank": 2
                }
            ]
        },
        {
            "node": "Workspace",
            "path": "wsp",
            "child": [
                {
                    "node": "Workspace.system1",
                    "path": "sys1"
                },
                {
                    "node": "Workspace.system2",
                    "path": "sys2"
                }
            ]
        }
    ]
}

提取规则示例

  • 传入 ['Admin.resource1', 'Workspace']:保留Admin节点及其子节点Admin.resouce1,完整保留Workspace节点;
  • 传入 ['Admin.resouce2', 'Workspace.system1']:保留Admin节点及其子节点Admin.resouce2,保留Workspace节点及其子节点Workspace.system1;
  • 传入 ['Admin']:完整保留Admin节点及其所有子节点。

尝试的代码(存在问题)

import json

master = json.loads(m)
menustruct = []
nde = ['Admin.resouce1', 'Workspace']
test_master = master['menustructure']
temp_json = test_master

for n in nde:
    temp_data = None
    if "." in n:
        menu_series = n.split(".")
    for m in temp_json:
        temp_data = m
        if temp_data['node'] == menu_series[0]:
            for sub_child in temp_data['child']:
                # 错误:子节点没有id字段,应该匹配node属性
                if sub_child['id'] == menu_series[1]:
                    idx = temp_data['child'].index(sub_child)
                else:
                    temp_data['child'].remove(sub_child)
        menustruct.append(temp_data)

print(menustruct)

现存问题

  • 传入 ['Admin.resouce1', 'Admin.resouce2', 'Workspace'] 时,Admin的子节点被错误清空,且Workspace节点被重复添加到结果中;
  • 代码仅支持单层子节点,无法处理多层嵌套的子子节点场景;
  • 直接修改原JSON对象的child列表,会破坏原始数据;
  • 未处理不包含.的节点(如直接传入Admin)的逻辑。

内容的提问来源于stack exchange,提问作者vineet singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:25:33