You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:45:13