简体   繁体   中英

How To Get The Unique Elements for Each Level (Like MainMenu/Submenu1/SubMenu2) On Json using java or javascript…?

I have the json Like below, i want to get the unique child sub nodes for each main nodes

{
    "name": "MENUS",
    "value": "",
    "children": [
        {
            "name": "MENU1",
            "value": {},
            "children": [
                {
                    "name": "SubMenu1",
                    "value": {},
                    "children": [
                        {
                            "name": "SubMenu2",
                            "value": {},
                            "children": [
                                {
                                    "name": "SubMenu3",
                                    "value": {
                                        "Pld": "1"
                                    },
                                    "children": []
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name": "MENU1",
            "value": {},
            "children": [
                {
                    "name": "SubMenu1",
                    "value": {},
                    "children": [
                        {
                            "name": "SubMenu2",
                            "value": {},
                            "children": [
                                {
                                    "name": "SubMenu4",
                                    "value": {
                                        "Pld": "1"
                                    },
                                    "children": []
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

I wanted the JSON like below format for each main nodes i want unique sub nodes means the subnode should not be a duplicate in the JSON.

{
    "name": "MENUS",
    "value": "",
    "children": [
        {
            "name": "MENU1",
            "value": {},
            "children": [
                {
                    "name": "SubMenu1",
                    "value": {},
                    "children": [
                        {
                            "name": "SubMenu2",
                            "value": {},
                            "children": [
                                {
                                    "name": "SubMenu3",
                                    "value": {
                                        "Pld": "1"
                                    },
                                    "children": []
                                },
                                {
                                    "name": "SubMenu4",
                                    "value": {
                                        "Pld": "1"
                                    },
                                    "children": []
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

Could you please anyone help me how to get the unique hierarchical tree JSON.

EDIT::Adding POJO classes for reference

This is how my java pojo looks like,

MenuTree.java

private String name;
private String value;
private Children[] children;

Children.java

private String name;
private Value value;
private Children[] children;

Value.java

private String Pld;

You could use an iterative and recursive approach by searching eachlevel for existing name and append the array with new objects if not found.

 var object = { name: "MENUS", value: "", children: [{ name: "MENU1", value: {}, children: [{ name: "SubMenu1", value: {}, children: [{ name: "SubMenu2", value: {}, children: [{ name: "SubMenu3", value: { Pld: "1" }, children: [] }] }] }] }, { name: "MENU1", value: {}, children: [{ name: "SubMenu1", value: {}, children: [{ name: "SubMenu2", value: {}, children: [{ name: "SubMenu4", value: { Pld: "1" }, children: [] }] }] }] }] }, unique = [object].reduce(function iter(r, { name, value, children = [] }) { var object = r.find(o => o.name === name); if (!object) { object = { name, value }; r.push(object); } children.reduce(iter, object.children = object.children || []); return r; }, []); console.log(unique); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM