【发布时间】:2019-03-14 00:30:18
【问题描述】:
var responseString = String(data: data, encoding: .utf8)
var responseDict: [AnyHashable : Any]? = nil
if let anEncoding = responseString?.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
responseDict = try! JSONSerialization.jsonObject(with: anEncoding, options: .mutableContainers) as? [AnyHashable : Any]
}
responseString 即将推出:
[{\"message_id\":1916,\"in_app\":{\"primary_color\":\"#333333\",\"secondary_color\":\"#ffffff\",\"position\ ":\"0\",\"持续时间\":\"30\",\"到期\":\"2018-11-07T23:17:46.169-05:00\",\"delay_minute\": \"0\",\"delay_second\":\"0\",\"message\":\"这个 是您的信息的样子!在文本中输入您的消息 区域并获得预览权 这里\",\"data\":{},\"deeplinkurl\":\"\",\"attachment-url\":\"\",\"title\":\"\",\" subtitle\":\"\"}},{\"message_id\":1920,\"in_app\":{\"primary_color\":\"#333333\",\"secondary_color\":\"#ffffff \",\"position\":\"0\",\"duration\":\"30\",\"expiry\":\"2018-11-08T03:52:15.404-05:00\" ,\"delay_minute\":\"0\",\"delay_second\":\"0\",\"message\":\"这个 是您的信息的样子!在文本中输入您的消息 区域并获得预览权 这里\",\"data\":{},\"deeplinkurl\":\"\",\"attachment-url\":\"\",\"title\":\"\",\"副标题\":\"\"}}]
responseDict 即将成为nil。
对应的Objective-C 代码运行良好。
【问题讨论】:
-
如果您使用 Swift 4,最好使用
Codable协议 -
那是因为
[AnyHashable : Any]是一个字典,但你的 JSON 是一个顶级数组。此外,避免使用 Swift 字典/数组的.mutableContainers。还有String.Encoding(rawValue: String.Encoding.utf8.rawValue)=>.utf8或String.Encoding.utf8。应该够了。 -
@Larme 您应该将其发布为答案
-
@Scriptable 关于 Swift/Objective-C 中 JSON 解析的问题太多了,至少应该有一个重复,因为作者没有看到响应的顶级类型。
-
如果你的变量不是编码,为什么你的变量叫做
anEncoding?
标签: ios swift jsonserializer