Swift 将数据映射到 [String: Any]

Swift Mapping Data to [String: Any]

我想将数据类型转换为 [String: Any],但 JSONSerialization 告诉我:

Cannot force unwrap value of non-optional type 'Data'

var json: [String: Any]
            do{
                let jsonEncoder = JSONEncoder()
                let encodedJson = try jsonEncoder.encode(message)
                json = try JSONSerialization.data(withJSONObject: encodedJson!, options: []) as? [String : Any]
            } catch {
                log.error(error.localizedDescription)
            }
return .requestParameters(parameters: json, encoding: JSONEncoding.default)

如果我删除 '!'来自 encodedJson,然后消息出现:

Value of optional type '[String : Any]?' not unwrapped; did you mean to use '!' or '?'?

如果我删除'?'从任何?,然后我使用 json 没有初始化它,当然

不知道如何解决这个问题(新 swift 程序员)

希望这不是一个愚蠢的问题

没有必要这样做,因为您已经在 encodedJson

中有了数据
json = try JSONSerialization.data(withJSONObject: encodedJson!, options: []) as? [String : Any]

因为 withJSONObject 需要一个不是 Data 的对象,同样将其转换为 [String:Any] 也会失败

您使用了错误的 API,data(withJSONObject 从数组或字典创建 Data

你需要反过来。要解决问题,请删除 encodedJson

后的感叹号
json = try JSONSerialization.jsonObject(with: encodedJson) as? [String : Any]

并声明 json 为可选的

var json: [String: Any]?

或者 – 如果 JSON 保证始终是字典 – 强制展开对象

json = try JSONSerialization.jsonObject(with: encodedJson) as! [String : Any]