java - kotlin 如何使用排序键将 JSONObject 或 Map 序列化为字符串?
问题描述
我想用 sorted_keys 将 JSONObject 或 Map 序列化为字符串。
val mapObject = mapOf<String, Any>(
"b" to arrayOf(
"bb",
mapOf<String, Any>(
"bbb" to "bbb",
"aaa" to "aaa"
),
"aa"
),
"a" to "a"
)
val jsonObject = JSONObject(mapObject)
println(jsonObject.toString())
它打印
{"b":["bb",{"bbb":"bbb","aaa":"aaa"},"aa"],"a":"a"}
但我想要它打印
{"a": "a", "b": ["bb", {"aaa": "aaa", "bbb": "bbb"}, "aa"]}
在 Python 中有
json.dumps(jsonObject, sort_keys=True)
去做这个。
在斯威夫特有
jsonObject.rawString(options: [.sortedKeys])
去做这个
但在 Android Kotlin 中似乎没有优雅的方法可以做到这一点。
解决方案
JSONObject
主要是一种不安全的中间格式,因此没有很多选项可以以这种形式使用它,主要是倾向于将反序列化为任何工作的“实际”类表示。
为此,如果您可以控制地图的输入,则可以从使用切换mapOf<String, Any>
到sortedMapOf<String, Any>
- Kotlin 为此维护不同的实现(类似地,如果您想在构建后编辑地图,则需要 a mutableMapOf<String, Any>
)。
如果您已经有一个现有的地图,您也可以使用该方法toSortedMap
。
默认情况下,所有排序都应基于键的自然顺序。
推荐阅读
- web - 如何在兼容 QWC 的 Web 服务中实现客户端身份验证(2 路 SSL)?
- sql - WHERE 子句块数据表分页中的 PDO 绑定参数 (?)
- mysql - 为特定值选择每个最新行
- python - 日期范围内的 DataFrame 选择返回无行
- amazon-web-services - 如果连接到其他 CDN 提供商,如何在 AWS S3 上为我的文件创建会话令牌?
- python - pycharm 是如何工作的?他们是如何与口译员挂钩的?
- node.js - Lambda 中的 NodeJS AWS KMS 解密
- spring - 如何使用 Spring Boot 处理服务异常?
- sql - 检查 Spring 数据 JPA 查询中的 List 参数是否为空
- php - php中如何存储资源类型