How to get the total depth of an unknown JSON hierarchy?

d3.js, javascript, json, nested

Solution

You can use a recursive function to go through the whole tree:

getDepth = function (obj) {
    var depth = 0;
    if (obj.children) {
        obj.children.forEach(function (d) {
            var tmpDepth = getDepth(d)
            if (tmpDepth > depth) {
                depth = tmpDepth
            }
        })
    }
    return 1 + depth
}

The function works as follow:

- If the object is not a leaf (i.e the object has the children attribute), then:

- Compute the depth of each child, save the maximal one

- return 1 + the depth of the deepest child

- Otherwise, return 1

jsFiddle: http://jsfiddle.net/chrisJamesC/hFTN8/

EDIT With modern JavaScript, the function could look like this:

const getDepth = ({ children }) => 1 +
    (children ? Math.max(...children.map(getDepth)) : 0)

jsFiddle: http://jsfiddle.net/chrisJamesC/hFTN8/59/

Problem

I've been struggling to find/build a recursive function to parse this JSON file and get the total depth of its children. The file looks something like this: ``` var input = { "name": "positive", "children": [{ "name": "product service", "children": [{ "name": "price", "children": [{ "name": "cost", "size": 8 }] }, { "name": "quality", "children": [{ "name": "messaging", "size": 4 }] }] }, { "name": "customer service", "children": [{ "name": "Personnel", "children": [{ "name": "CEO", "size": 7 }] }] }, { "name": "product", "children": [{ "name": "Apple", "children": [{ "name": "iPhone 4", "size": 10 }] }] }] } ```

Original source