java - 如何在kotlin中将地图转换为Json字符串?
问题描述
我有一个可变映射,
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 格式字符串是:
{"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()
推荐阅读
- linked-list - 这个程序是栈队列和链表的组合
- python - 编写一个接收整数列表的函数,如果它按顺序包含 007,则返回 True - 我的代码不起作用
- python - 使用傅里叶变换找不到信号的频率
- html - 如何使用对本地 JSON 文件的一个请求来填充多个下拉列表,使用 jQuery?
- flutter - 从小部件颤振切割矩形?
- peerjs - 如何以编程方式断开用户与 peerServer 的连接
- python - 数据框中的多个过滤器
- networking - 从主机操作系统访问 VirtualBOX Machine 的服务器
- php - Symfony - Api 平台 - 子资源错误
- java - 如何在android中更改日期选择器背景颜色