java - 如何在 kotlin 中将 map 转换为 Json 字符串?

标签 java json kotlin dictionary gson

我有一个 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"}

最佳答案

右边json formatting string是:

{"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/

相关文章:

java - 如何在 Tomcat 上制作服务器范围的过滤器?

java - 将图像添加到 GUI

java - 将对象分配给 Java 对象

java - 为什么 Spring Boot 返回一个字符串而不是 JSON

java - 如何让 Timestamp 对象在 JSON 中以 long 类型显示?

kotlin - 在Kotlin中存储String网格的最佳数据结构是什么?

android - 选择 'Copy' 时,在 Android 10 中未接收到来自 Intent 发送者的广播

java - 如何对整数ArrayList进行排序而不考虑正负值

javascript - 如何从此 API 链接获取数据?

通过作用域函数的 Kotlin 字段分配(应用)