3

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

无法强制解开非可选类型“数据”的值

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,然后消息发生:

可选类型 '[String : Any]?' 的值 未拆封;你的意思是用'!' 或者 '?'?

如果我删除“?” 从任何?,然后我使用json而不初始化它,当然

不知道如何解决这个问题(新的 swift 编码器)

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

4

2 回答 2

4

您使用了错误的 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]
于 2018-07-02T08:11:12.377 回答
1

没有必要这样做,因为您已经拥有数据encodedJson

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

正如withJSONObject预期的对象不是 Data ,也将其转换为[String:Any]将失败

于 2018-07-02T08:10:01.480 回答