我有一个 mutableMap,
val invoiceAdditionalAttribute = mutableMapOf<String, Any?>()
invoiceAdditionalAttribute.put("clinetId",12345)
invoiceAdditionalAttribute.put("clientName", "digital")
invoiceAdditionalAttribute.put("payload", "xyz")
我想把它转成json字符串
输出应该是,
"{\"clinetId\"=\"12345\", \"clientName\"=\"digital\", \"payload\"=\"xyz\"}"
目前,我正在使用 Gson 库,
val json = gson.toJson(invoiceAdditionalAttribute)
输出是
{"clinetId":12345,"clientName":"digital","payload":"xyz"}
最佳答案
{"clinetId":12345,"clientName":"digital","payload":"xyz"}
所以这是获取它的正确方法:
val json = gson.toJson(invoiceAdditionalAttribute)
如果你想要一个像这样格式化的字符串:
{"clinetId"=12345, "clientName"="digital", "payload"="xyz"}
只需替换 :
与 =
:
val json = gson.toJson(invoiceAdditionalAttribute).replace(":", "=")
但是如果你真的想要一个带有反斜杠和 clinetId
的字符串值在引号内:
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("}")
}
// Using extension function
val customJson = invoiceAdditionalAttribute.toCustomJson()
关于java - 如何在 kotlin 中将 map 转换为 Json 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62534616/