JKSwiftExtension
JKSwiftExtension copied to clipboard
sortDictionary
好像只能排序最外层,如果是嵌套字典内部的未排序
推荐直接使用系统的方法,比如
let testData: [String: Any] = [
"c_info": "基础信息",
"a_user": [
"name": "JoanKing",
"age": 18,
"profile": [
"vip": true,
"level": 99,
"badge": "Gold"
]
],
"b_device": [
"ios_version": 17.0,
"app_list": [
["id": 2, "name": "AppTwo"], // 数组里的字典1
["id": 1, "name": "AppOne"] // 数组里的字典2
],
"device_id": "UUID-1234"
]
]
if let data = try? JSONSerialization.data(withJSONObject: testData, options: .sortedKeys) { // 注意这个 .sortedKeys
let jsonString = String(data: data, encoding: .utf8)
debugPrint(jsonString) // 输出: {"a":2,"b":1} <-- 自动排好了
}
sortedKeys 通常用于以下几个严格依赖“顺序”的场景:
1.API 签名校验 (MD5 / SHA) 很多后端 API 要求你把参数转成 JSON 字符串,然后计算 MD5 值作为签名。如果 key 的顺序乱了,生成的字符串就不一样,算出来的 MD5 也就不一样,导致签名验证失败。使用 .sortedKeys 可以确保发送方和接收方生成的字符串完全一致。
2.数据对比 (Diff) 如果你想对比两个 JSON 数据是否发生变化,如果顺序是乱的,肉眼很难看出来,工具也会显示全是差异。排序后,只有真正改动的值会被标红。
3.缓存 Key 有些系统会把 JSON 字符串作为缓存的 Key。如果顺序变了,同一个请求就会生成不同的 Key,导致缓存失效。