简体   繁体   中英

Headcount under nested JSON

I am trying to get the employee count under a manger and trying to add it If Manager=True from the below nested JSON

[{
"name": "Wendeline",
"IsManager": "TRUE",
"children": [{
    "name": "Goraud",
    "IsManager": "TRUE",
    "EmployeeNumber": 706997,
    "children": [{
        "name": "Mersey",
        "IsManager": "FALSE",
        "EmployeeNumber": 102752,
        "children": []
    }, {
        "name": "Elli",
        "IsManager": "FALSE",
        "EmployeeNumber": 742047,
        "children": [{
            "name": "Hans",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }]
    }, {
        "name": "Bald",
        "IsManager": "FALSE",
        "EmployeeNumber": 741064,
        "children": []
    }, {
        "name": "Truda",
        "IsManager": "FALSE",
        "EmployeeNumber": 739162,
        "children": []
    }, {
        "name": "Matty",
        "IsManager": "FALSE",
        "EmployeeNumber": 717067,
        "children": []
    }, {
        "name": "Ola",
        "IsManager": "TRUE",
        "EmployeeNumber": 713122,
        "children": [{
            "name": "Frankie",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Quint",
            "IsManager": "FALSE",
            "EmployeeNumber": 705616,
            "children": []
        }, {
            "name": "Georgi",
            "IsManager": "FALSE",
            "EmployeeNumber": 733001,
            "children": []
        }, {
            "name": "Danie",
            "IsManager": "FALSE",
            "EmployeeNumber": 742962,
            "children": []
        }, {
            "name": "Judon",
            "IsManager": "FALSE",
            "EmployeeNumber": 750620,
            "children": []
        }, {
            "name": "Nellie",
            "IsManager": "FALSE",
            "EmployeeNumber": 101490,
            "children": []
        }, {
            "name": "Marji",
            "IsManager": "FALSE",
            "EmployeeNumber": 705660,
            "children": []
        }, {
            "name": "Adelaida",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Bing",
            "IsManager": "FALSE",
            "EmployeeNumber": 745205,
            "children": []
        }, {
            "name": "Odilia",
            "IsManager": "FALSE",
            "EmployeeNumber": 718622,
            "children": []
        }]
    }, {
        "name": "Bernardina",
        "IsManager": "FALSE",
        "EmployeeNumber": 726710,
        "children": []
    }, {
        "name": "Myca",
        "IsManager": "FALSE",
        "EmployeeNumber": 726163,
        "children": []
    }, {
        "name": "Husain",
        "IsManager": "FALSE",
        "EmployeeNumber": 728267,
        "children": []
    }, {
        "name": "Cristie",
        "IsManager": "FALSE",
        "EmployeeNumber": 750267,
        "children": []
    }, {
        "name": "Nikolai",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "James",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Ashbey",
        "IsManager": "FALSE",
        "EmployeeNumber": 744719,
        "children": []
    }, {
        "name": "Flss",
        "IsManager": "FALSE",
        "EmployeeNumber": 746709,
        "children": []
    }, {
        "name": "Felisha",
        "IsManager": "FALSE",
        "EmployeeNumber": 739945,
        "children": [{
            "name": "Zelig",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Jakob",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }]
    }]
}, {
    "name": "Cointon",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Jo",
    "IsManager": "TRUE",
    "EmployeeNumber": 716884,
    "children": [{
        "name": "Sylvia",
        "IsManager": "FALSE",
        "EmployeeNumber": 744160,
        "children": []
    }, {
        "name": "Vicki",
        "IsManager": "FALSE",
        "EmployeeNumber": 735637,
        "children": []
    }, {
        "name": "Blanche",
        "IsManager": "FALSE",
        "EmployeeNumber": 729407,
        "children": []
    }, {
        "name": "Mirabelle",
        "IsManager": "FALSE",
        "EmployeeNumber": 731551,
        "children": []
    }, {
        "name": "Floria",
        "IsManager": "FALSE",
        "EmployeeNumber": 727255,
        "children": []
    }, {
        "name": "Flossie",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Anny",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Hyatt",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Juli",
        "IsManager": "FALSE",
        "EmployeeNumber": 740132,
        "children": []
    }, {
        "name": "Isacco",
        "IsManager": "FALSE",
        "EmployeeNumber": 742246,
        "children": []
    }, {
        "name": "Fleurette",
        "IsManager": "FALSE",
        "EmployeeNumber": 742205,
        "children": []
    }, {
        "name": "Dicky",
        "IsManager": "FALSE",
        "EmployeeNumber": 742736,
        "children": []
    }, {
        "name": "Wini",
        "IsManager": "FALSE",
        "EmployeeNumber": 741836,
        "children": []
    }, {
        "name": "Elden",
        "IsManager": "FALSE",
        "EmployeeNumber": 743234,
        "children": []
    }, {
        "name": "Marjie",
        "IsManager": "FALSE",
        "EmployeeNumber": 740196,
        "children": []
    }, {
        "name": "Vanna",
        "IsManager": "FALSE",
        "EmployeeNumber": 738053,
        "children": []
    }, {
        "name": "Emilio",
        "IsManager": "FALSE",
        "EmployeeNumber": 751901,
        "children": []
    }, {
        "name": "Enrique",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Lilas",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Elita",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Hyacintha",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Markus",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Calhoun",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Melisande",
        "IsManager": "FALSE",
        "EmployeeNumber": 748847,
        "children": []
    }, {
        "name": "Haroun",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Niles",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Adorne",
        "IsManager": "FALSE",
        "EmployeeNumber": 724804,
        "children": []
    }, {
        "name": "Dianne",
        "IsManager": "FALSE",
        "EmployeeNumber": 724863,
        "children": []
    }, {
        "name": "Faye",
        "IsManager": "FALSE",
        "EmployeeNumber": 732329,
        "children": []
    }, {
        "name": "Tabina",
        "IsManager": "FALSE",
        "EmployeeNumber": 724910,
        "children": []
    }]
}, {
    "name": "Spike",
    "IsManager": "FALSE",
    "EmployeeNumber": 732941,
    "children": [{
        "name": "Reta",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Cirillo",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }]
}, {
    "name": "Berty",
    "IsManager": "TRUE",
    "EmployeeNumber": 726527,
    "children": [{
        "name": "Gerrie",
        "IsManager": "TRUE",
        "EmployeeNumber": 727939,
        "children": [{
            "name": "Kelci",
            "IsManager": "FALSE",
            "EmployeeNumber": 739483,
            "children": []
        }, {
            "name": "Alexandros",
            "IsManager": "FALSE",
            "EmployeeNumber": 723369,
            "children": []
        }, {
            "name": "Loreen",
            "IsManager": "FALSE",
            "EmployeeNumber": 746432,
            "children": []
        }, {
            "name": "Cortie",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Keven",
            "IsManager": "FALSE",
            "EmployeeNumber": 723060,
            "children": []
        }, {
            "name": "Shanie",
            "IsManager": "FALSE",
            "EmployeeNumber": 707562,
            "children": []
        }, {
            "name": "Hatti",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Tammi",
            "IsManager": "FALSE",
            "EmployeeNumber": 717763,
            "children": []
        }, {
            "name": "Blondell",
            "IsManager": "FALSE",
            "EmployeeNumber": 731167,
            "children": []
        }]
    }, {
        "name": "Bellina",
        "IsManager": "FALSE",
        "EmployeeNumber": 731162,
        "children": []
    }, {
        "name": "Constancia",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
    }, {
        "name": "Dieter",
        "IsManager": "FALSE",
        "EmployeeNumber": 725942,
        "children": []
    }, {
        "name": "Illa",
        "IsManager": "FALSE",
        "EmployeeNumber": 733953,
        "children": [{
            "name": "Roley",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Talbot",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }]
    }, {
        "name": "Theodora",
        "IsManager": "TRUE",
        "EmployeeNumber": 721734,
        "children": [{
            "name": "Ebeneser",
            "IsManager": "FALSE",
            "EmployeeNumber": 741729,
            "children": []
        }, {
            "name": "Allie",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Benita",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Elmira",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Dene",
            "IsManager": "FALSE",
            "EmployeeNumber": 739572,
            "children": []
        }, {
            "name": "Hamil",
            "IsManager": "FALSE",
            "EmployeeNumber": 731393,
            "children": []
        }, {
            "name": "Fitzgerald",
            "IsManager": "FALSE",
            "EmployeeNumber": 710334,
            "children": [{
                "name": "Leon",
                "IsManager": "FALSE",
                "EmployeeNumber": "TBD",
                "children": []
            }]
        }, {
            "name": "Mignon",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Constantina",
            "IsManager": "FALSE",
            "EmployeeNumber": 744831,
            "children": []
        }, {
            "name": "Alysa",
            "IsManager": "FALSE",
            "EmployeeNumber": 736292,
            "children": []
        }]
    }]
}, {
    "name": "Garrik",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Onofredo",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Josefa",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Nan",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Birgit",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Ashlan",
    "IsManager": "FALSE",
    "EmployeeNumber": "TBD",
    "children": []
}, {
    "name": "Rod",
    "IsManager": "TRUE",
    "EmployeeNumber": 726043,
    "children": [{
        "name": "Lorie",
        "IsManager": "TRUE",
        "EmployeeNumber": 711520,
        "children": [{
            "name": "Norris",
            "IsManager": "FALSE",
            "EmployeeNumber": 736426,
            "children": []
        }, {
            "name": "Josefa",
            "IsManager": "FALSE",
            "EmployeeNumber": 728365,
            "children": []
        }, {
            "name": "Carma",
            "IsManager": "FALSE",
            "EmployeeNumber": 751153,
            "children": []
        }, {
            "name": "Rozelle",
            "IsManager": "FALSE",
            "EmployeeNumber": 738418,
            "children": []
        }, {
            "name": "Tine",
            "IsManager": "FALSE",
            "EmployeeNumber": 721367,
            "children": []
        }, {
            "name": "Ransom",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Hildagarde",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Grant",
            "IsManager": "FALSE",
            "EmployeeNumber": 712948,
            "children": []
        }]
    }, {
        "name": "Karilynn",
        "IsManager": "FALSE",
        "EmployeeNumber": 102152,
        "children": []
    }, {
        "name": "Tine",
        "IsManager": "FALSE",
        "EmployeeNumber": 717285,
        "children": []
    }, {
        "name": "Lenna",
        "IsManager": "FALSE",
        "EmployeeNumber": 707659,
        "children": []
    }, {
        "name": "Fanni",
        "IsManager": "TRUE",
        "EmployeeNumber": 102936,
        "children": [{
            "name": "Nani",
            "IsManager": "FALSE",
            "EmployeeNumber": 726746,
            "children": []
        }, {
            "name": "Jethro",
            "IsManager": "FALSE",
            "EmployeeNumber": 744442,
            "children": []
        }, {
            "name": "Olenka",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Morena",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Susana",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Hammad",
            "IsManager": "FALSE",
            "EmployeeNumber": "TBD",
            "children": []
        }, {
            "name": "Erwin",
            "IsManager": "FALSE",
            "EmployeeNumber": 711550,
            "children": []
        }]
    }, {
        "name": "Petr",
        "IsManager": "FALSE",
        "EmployeeNumber": "TBD",
        "children": []
       }]
   }]
  }]

I tried this Link which is similar requirement to mine

But in My Case it is nested JSON I am looking for this output as below

If Is Manger=True add this count as a key Value to parent

"Key(Count)":"DirectChildrencount/TBDCount/EmployeeCount(Only who has employee number)"

Example:

{
"name":"Wendeline",
"IsManager": "TRUE",
"count":"8/4TBD/3FTE"
}

Any Help would be appreciated thanks in advance

We can get the DirectChildrencount using the children.length property. Further, we will make use of Array.prototype.reduce() to calculate TBDCount and EmployeeCount . We will use Array.prototype.map() to recursively iterate over the children .

Here is the code snippet that manipulates the input to obtain required output. Suppose a is your array:

const a = [ /* */ ]

const transform = x => {
    if (x.IsManager === "TRUE") {
        const child = x.children.reduce(
            (acc, curr) => {
                acc.tbd = curr.EmployeeNumber === "TBD" ? acc.tbd + 1 : acc.tbd;
                acc.fte = curr.EmployeeNumber !== "TBD" ? acc.fte + 1 : acc.fte;
                return acc;
            },
            { tbd: 0, fte: 0 }
        );
        x.count = `${x.children.length}/${child.tbd}TBD/${child.fte}FTE`;
    }
    x.children = x.children.map(transform);
    return x;
};
const b = a.map(transform);
console.log(b);

Because we are assigning output of map to x.children , you can also do:

a = [/* */];
a.forEach(transform);
console.log(a)

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