As part of developing custom functions for a google sheet using Google Apps Script (GAS), I am trying to get a flattened tree of an object's property (key?) names. I'm not interested in any of the values, I just want to print out a dot notation tree of all of the object's property (key) names. The object has an unknown depth and unknown structure.
example:
{
    "level1_prop1": "stuff",
    "level1_prop2": 0,
    "level1_prop3": 50,
    "level1_prop4": [{
            "level2_prop1": "more stuffs, and things",
            "level2_prop2": "10000",
            "level2_prop3": {
                "level3_prop1": {
                    "level4_prop1": "other stuff",
                    "level4_prop1": "so much stuff",
                },
                "level3_prop2": null,
            }
        }, {
            "level2_prop1": "still more and more",
            "level2_prop2": "10001",
            "level2_prop3": {
                "level3_prop1": {
                    "level4_prop1": "other stuffssssss",
                    "level4_prop1": "so much stuffssssssss",
                },
                "level3_prop2": null,
            }
        }         
    ]
}
desired output in a string or array of strings:
object.level1_prop1
object.level1_prop2
object.level1_prop3
object.level1_prop4
object.level1_prop4.level2_prop1
object.level1_prop4.level2_prop2
object.level1_prop4.level2_prop3
object.level1_prop4.level2_prop3.level3_prop1
object.level1_prop4.level2_prop3.level3_prop1.level4_prop1
object.level1_prop4.level2_prop3.level3_prop1.level4_prop2
object.level1_prop4.level2_prop3.level3_prop2
I ultimately want to use this to selectively remove specific properties/keys throughout the entire object. for example:
remove(object.level1_prop4.level2_prop3.level3_prop1) 
would result in
object.level1_prop1
object.level1_prop2
object.level1_prop3
object.level1_prop4
object.level1_prop4.level2_prop1
object.level1_prop4.level2_prop2
object.level1_prop4.level2_prop3
object.level1_prop4.level2_prop3.level3_prop2
update: adding specification that the answer is intended for use in a custom Google Apps Script (GAS) function, since the first wave of answers are causing errors when I paste them into my code.gs file. My apologies to those who already answered under a different pretense.
 
     
     
    