所以,我有问题从我的json数据正确映射我的ID属性。我不确定我错过了什么因为我能够成功映射一个类似的属性,它也有类似的数据。
这是我创建的模型:
import Foundation
import ObjectMapper
enum ItemsModelEnum: String {
case kind = "kind"
case etag = "etag"
case id = "id"
}
struct ItemsModel: Mappable {
var kind: String!
var etag: String!
var id: String!
init?(map: Map) {
}
init(kind: String, etag: String, id: String) {
self.kind = kind
self.etag = etag
self.id = id
}
init() {
self.kind = ""
self.etag = ""
self.id = ""
}
mutating func mapping(map: Map) {
kind <- map[ItemsModelEnum.kind.rawValue]
etag <- map[ItemsModelEnum.etag.rawValue]
id <- map[ItemsModelEnum.id.rawValue]
}
}
这是我用过的映射代码:
do {
if let data = data,
let videoData = Mapper<ItemsModel>().map(JSONObject: try JSONSerialization.jsonObject(with: data, options: [])) {
completionHandler(videoData,(response as! HTTPURLResponse), error)
print("videoData Received Successfully")
}
} catch {
completionHandler(nil,(response as! HTTPURLResponse), error)
print("Error parsing json get video data: ", error.localizedDescription)
}
以下是我想要映射的json数据:
{
"kind": "youtube#playlistItemListResponse",
"etag": "\"XpPGQXPnxQJhLgs6enD_n8JR4Qk/b8GuhpTu3jI8LxmNA8qvlToNlPw\"",
"pageInfo": {
"totalResults": 4,
"resultsPerPage": 10
},
"items": [
{
"kind": "youtube#playlistItem",
"etag": "\"XpPGQXPnxQJhLgs6enD_n8JR4Qk/kB3sYP4gnQpTay_xsLPdd60nCjI\"",
"id": "UExDQWlfRXlJcWtfdTJyaG1aS0Jhdzk0NmNmVXhENHg5NS41NkI0NEY2RDEwNTU3Q0M2",
}
}
有趣的是etag属性被成功映射但不是id属性,因为当我得到响应时它给了我nil。
知道可能是什么原因?
在我的Xcode中,当我打印我的对象时,我得到以下输出:
打印videoData的说明:
▿ ItemsModel
▿ kind : Optional<String>
- some : "youtube#playlistItemListResponse"
▿ etag : Optional<String>
- some : "\"XpPGQXPnxQJhLgs6enD_n8JR4Qk/qgaG7pUX51uAQMMOBOI0NggOfXM\""
- id : nil
你试图得到id
,但你有pageInfo
或items
那里。你需要更深入地了解路径["items"][0]["id"]
您尝试直接从对象获取id,但您需要的对象位于更深处。
你需要为main object
创建3个结构,对于具有键"pageInfo"
的对象,为具有键"items"
的对象创建。