chore: simplify pretty print json string #201

Merged
PeterCxy merged 1 commit from septs/OpenEUICC:simplify-pretty-print-json into master 2025-07-16 14:24:05 +02:00
2 changed files with 3 additions and 71 deletions

View file

@ -8,6 +8,7 @@ import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import im.angry.openeuicc.common.R import im.angry.openeuicc.common.R
import im.angry.openeuicc.util.* import im.angry.openeuicc.util.*
import org.json.JSONObject
import java.util.Date import java.util.Date
class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardStepFragment() { class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardStepFragment() {
@ -86,9 +87,10 @@ class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardS
ret.appendLine() ret.appendLine()
val str = resp.data.decodeToString(throwOnInvalidSequence = false) val str = resp.data.decodeToString(throwOnInvalidSequence = false)
ret.appendLine( ret.appendLine(
if (str.startsWith('{')) { if (str.startsWith('{')) {
str.prettyPrintJson() JSONObject(str).toString(2)
} else { } else {
str str
} }

View file

@ -41,73 +41,3 @@ fun parseIsdrAidList(s: String): List<ByteArray> =
.filter(String::isNotEmpty) .filter(String::isNotEmpty)
.mapNotNull { runCatching(it::decodeHex).getOrNull() } .mapNotNull { runCatching(it::decodeHex).getOrNull() }
.ifEmpty { listOf(EUICC_DEFAULT_ISDR_AID.decodeHex()) } .ifEmpty { listOf(EUICC_DEFAULT_ISDR_AID.decodeHex()) }
fun String.prettyPrintJson(): String {
val ret = StringBuilder()
var inQuotes = false
var escaped = false
val indentSymbolStack = ArrayDeque<Char>()
val addNewLine = {
ret.append('\n')
repeat(indentSymbolStack.size) {
ret.append('\t')
}
}
var lastChar = ' '
for (c in this) {
when {
!inQuotes && (c == '{' || c == '[') -> {
ret.append(c)
indentSymbolStack.addLast(c)
addNewLine()
}
!inQuotes && (c == '}' || c == ']') -> {
indentSymbolStack.removeLast()
if (lastChar != ',') {
addNewLine()
}
ret.append(c)
}
!inQuotes && c == ',' -> {
ret.append(c)
addNewLine()
}
!inQuotes && c == ':' -> {
ret.append(c)
ret.append(' ')
}
inQuotes && c == '\\' -> {
ret.append(c)
escaped = true
continue
}
!escaped && c == '"' -> {
ret.append(c)
inQuotes = !inQuotes
}
!inQuotes && c == ' ' -> {
// Do nothing -- we ignore spaces outside of quotes by default
// This is to ensure predictable formatting
}
else -> ret.append(c)
}
if (escaped) {
escaped = false
}
lastChar = c
}
return ret.toString()
}