Swift iOS中如何将[AnyHashable: Any]转换为[String: Any]?
将[AnyHashable: Any]转换为[String: Any]或JSON的实现方法
一、转换为[String: Any]
由于AnyHashable包装的key如果是String类型,可以通过提取其base属性来转换为字符串key的字典:
// 示例输入字典 let anyHashableDict: [AnyHashable: Any] = [ AnyHashable("mobile"): 1234567890, AnyHashable("device-id"): "BE7HA05F-7C5B-40BA-A10C-0C5AJ7GEFC3F", AnyHashable("os"): "ios" ] // 初始化目标字典 var stringKeyDict: [String: Any] = [:] // 遍历原字典,过滤并转换key for (key, value) in anyHashableDict { // 判断key的原始类型是否为String if let stringKey = key.base as? String { stringKeyDict[stringKey] = value } } // 打印结果 print(stringKeyDict) // 输出: ["mobile": 1234567890, "device-id": "BE7HA05F-7C5B-40BA-A10C-0C5AJ7GEFC3F", "os": "ios"]
说明:如果原字典中存在非String类型的key,这段代码会自动过滤掉它们。如果需要保留其他类型的key,可以根据需求修改类型判断逻辑。
二、转换为JSON格式
要转换为JSON,需要先将[AnyHashable: Any]转为[String: Any],再通过JSONSerialization处理:
do { // 将[String: Any]转为JSON数据 let jsonData = try JSONSerialization.data(withJSONObject: stringKeyDict, options: .prettyPrinted) // 将JSON数据转为字符串 if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) } } catch { print("JSON转换失败: \(error.localizedDescription)") }
输出的JSON字符串:
{ "mobile" : 1234567890, "device-id" : "BE7HA05F-7C5B-40BA-A10C-0C5AJ7GEFC3F", "os" : "ios" }
注意事项:如果字典中的值包含无法被JSON序列化的类型(比如自定义类、结构体),需要先将这些值转换为JSON支持的类型(如String、Number等),否则JSONSerialization会抛出错误。
内容的提问来源于stack exchange,提问作者Jaini
相关产品推荐
相关产品推荐

