// data = output of jsonDecode() sclass JSONKeyTree { new Set out; Set get(O data) { process("", data); ret out; } void process(S prefix, O data) { if (data cast L) { S s = prefix + "[]"; out.add(s); for (O o : data) process(s, o); } else if (data cast Map) { for (O key, O val : data) { S s = prefix + "." + key; out.add(s); process(s, o); } } else if (data == null) out.add(prefix + " is null"); else out.add(prefix + " is a " + shortClassName(o)); } }