JSONSerialization.jsonObject 对于复杂数组
JSONSerialization.jsonObject for complex array
我正在尝试从 API 中获取数据 return 到对象中。但是我收到错误,因为数组很复杂且类型不同 - 根据请求,它也与 API 不同。
let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Dictionary<String, String>>
给出的 array/data 是这样的:
[
'heartbeatStatus' => 'ok',
'events' => [
['id' => '1', 'name' => 'Event'],
['id' => '2', 'name' => 'Event 2'],
]
]
有什么简单的方法吗?到目前为止,我在 SO 上看到的问题要么是针对 Swift 的旧版本(这是 Swift 5),要么只是不同。
我得到的错误是这样的(与我的各种尝试不同)
Could not cast value of type '__NSSingleObjectArrayI' (0x1ed250b30) to
'NSDictionary' (0x1ed251378). 2020-04-13 18:52:23.173759+0100
removed app id [1209:472869] Could not cast value of type
'__NSSingleObjectArrayI' (0x1ed250b30) to 'NSDictionary'
(0x1ed251378).
尝试使用Codable。首先定义一个结构作为你的模型:
struct HeartbeatResponse: Codable { // or whatever
let heartbeatStatus: String
let events: [Event]
struct Event: Codable {
let id: String
let name: String
}
}
然后解码:
do {
if let data = data {
let heartbeat = JSONDecoder().decode(HeartbeatResponse.self, data)
// do stuff with heartbeat
}
} catch {
print(error)
}
我正在尝试从 API 中获取数据 return 到对象中。但是我收到错误,因为数组很复杂且类型不同 - 根据请求,它也与 API 不同。
let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Dictionary<String, String>>
给出的 array/data 是这样的:
[
'heartbeatStatus' => 'ok',
'events' => [
['id' => '1', 'name' => 'Event'],
['id' => '2', 'name' => 'Event 2'],
]
]
有什么简单的方法吗?到目前为止,我在 SO 上看到的问题要么是针对 Swift 的旧版本(这是 Swift 5),要么只是不同。
我得到的错误是这样的(与我的各种尝试不同)
Could not cast value of type '__NSSingleObjectArrayI' (0x1ed250b30) to 'NSDictionary' (0x1ed251378). 2020-04-13 18:52:23.173759+0100 removed app id [1209:472869] Could not cast value of type '__NSSingleObjectArrayI' (0x1ed250b30) to 'NSDictionary' (0x1ed251378).
尝试使用Codable。首先定义一个结构作为你的模型:
struct HeartbeatResponse: Codable { // or whatever
let heartbeatStatus: String
let events: [Event]
struct Event: Codable {
let id: String
let name: String
}
}
然后解码:
do {
if let data = data {
let heartbeat = JSONDecoder().decode(HeartbeatResponse.self, data)
// do stuff with heartbeat
}
} catch {
print(error)
}