fun Any.prettyPrint(): String { val sb = StringBuilder() val chars = toString().toCharArray() var level = 0 var inString = false var inArray = false for (char in chars) { when (char) { '(' -> { if (!inString) { level++ sb.append(char) sb.append('\n') sb.append("\t".repeat(level)) } } ')' -> { if (!inString) { level-- sb.append('\n') sb.append("\t".repeat(level)) sb.append(char) } } '{' -> { if (!inString) { level++ sb.append(char) sb.append('\n') sb.append("\t".repeat(level)) } } '}' -> { if (!inString) { level-- sb.append('\n') sb.append("\t".repeat(level)) sb.append(char) } } '=' -> { if (!inString) { sb.append(" = ") } } ',' -> { if (!inString && !inArray) { sb.append(char) sb.append('\n') sb.append("\t".repeat(level)) } else { sb.append(char) } } ' ' -> { if (!inString && !inArray && sb.lastOrNull() == ',') { // no-op } } '[' -> { if (!inString) inArray = true sb.append(char) } ']' -> { if (!inString) inArray = false } '"' -> { inString = !inString sb.append(char) } else -> { sb.append(char) } } } return sb.toString() }