Search code examples
javascriptjsonxpath

Javascript/JSON get path to given subnode?


How would you get a JSON path to a given child node of an object?

E.g.:

var data = {
    key1: {
        children: {
            key2:'value',
            key3:'value',
            key4: { ... }
        }, 
    key5: 'value'
}

An variable with a reference to key4 is given. Now I'm looking for the absolute path:

data.key1.children.key4

Is there any way to get this done in JS?

Thank you in advance.


Solution

  • So you have a variable with the value "key3", and you want to know how to access this property dynamically, based on the value of this string?

    var str = "key3";
    data["key1"]["children"][str];
    

    EDIT

    Wow, I can't believe I got this on the first try. There might be some bugs in it, but it works for your test case

    LIVE DEMO

    var x = data.key1.children.key4;
    
    var path = "data";
    function search(path, obj, target) {
        for (var k in obj) {
            if (obj.hasOwnProperty(k))
                if (obj[k] === target)
                    return path + "['" + k + "']"
                else if (typeof obj[k] === "object") {
                    var result = search(path + "['" + k + "']", obj[k], target);
                    if (result)
                        return result;
                }
        }
        return false;
    }
    
    var path = search(path, data, x);
    console.log(path); //data['key1']['children']['key4']