正确的 JSON格式字符串是:
{"clinetId":12345,"clientName":"digital","payload":"xyz"}
所以这是获得它的正确方法:
val json = gson.toJson(invoiceAdditionalAttribute)
如果您想要格式化一个字符串如下所示:
{"clinetId"=12345, "clientName"="digital", "payload"="xyz"}
只需用=
替换:
:
val json = gson.toJson(invoiceAdditionalAttribute).replace(":", "=")
但如果你真的想要一个带有反斜杠和clientId
值的字符串放在引号中:
val invoiceAdditionalAttribute = mutableMapOf<String, Any?>()
invoiceAdditionalAttribute["clinetId"] = 12345.toString()
invoiceAdditionalAttribute["clientName"] = "digital"
invoiceAdditionalAttribute["payload"] = "xyz"
val json = gson.toJson(invoiceAdditionalAttribute)
.replace(":", "=")
.replace("\"", "\\\"")
编辑:
正如评论中指出的那样,如果某些字符串值包含“:”字符,则.replace(":", "=")
可能会很脆弱。
为了避免这种情况,我会在Map<String, Any?>
上编写自定义扩展函数:
fun Map<String, Any?>.toCustomJson(): String = buildString {
append("{")
var isFirst = true
this@toCustomJson.forEach {
it.value?.let { value ->
if (!isFirst) {
append(",")
}
isFirst = false
append("\\\"${it.key}\\\"=\\\"$value\\\"")
}
}
append("}")
}
val customJson = invoiceAdditionalAttribute.toCustomJson()
"{\"clinetId\"=\"12345\", \"clientName\"=\"digital\", \"payload\"=\"xyz\"}"
- 这不是一个JSON字符串。JSON有它自己的格式规则,而这个字符串并不符合它的规则。gson.toJson(invoiceAdditionalAttribute)
- 是正确的方法来获取JSON字符串。 - Sergio"
("\""
),以便成为Java中有效的字符串。如果你真的想要转义它,你可以这样做:String escapedJson = json.replaceAll("\"", "\\\\\"");
- KunLun