快速将数据映射到[String:Any]

时间:2018-07-02 08:02:45

标签: ios swift dictionary moya json-serialization

我想将数据类型转换为[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:任何]的值?'不展开你是说用'!'还是“?”?

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

不知道该如何解决(新的快速编码器)

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

不需要,因为您已经在encodedJson中保存了数据

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

withJSONObject期望对象不是Data,也将其强制转换为[String:Any]将会失败