kotlin如何序列化JSONObject或映射到字符串排序键?



我想用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)

在Swift中有

jsonObject.rawString(options: [.sortedKeys])

执行此操作

但是在Android Kotlin中似乎没有优雅的方法来做到这一点。

JSONObject主要是不安全的&中间格式,所以在这种形式下使用它没有很多选择,主要倾向于反序列化到"实际"。任何作品的类表示

为此,如果你可以控制地图的输入,你可以从使用mapOf<String, Any>切换到sortedMapOf<String, Any>- Kotlin对此保持不同的实现(类似地,如果你想在构建后编辑你的地图,你会想要一个mutableMapOf<String, Any>)。

如果您已经有一个现有的映射,您也可以使用toSortedMap方法。

默认情况下,所有的排序都应该基于键的自然顺序。

最新更新