我想将数据类型转换为[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
不知道该如何解决(新的快速编码器)
希望这不是一个愚蠢的问题
答案 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]
将会失败