#json #swift #objectmapper
#json #swift #objectmapper
Вопрос:
Итак, у меня возникли проблемы с корректным отображением моего атрибута ID из моих данных json. Я не совсем уверен, чего мне не хватает, потому что я смог успешно сопоставить аналогичный атрибут, который также имеет похожие данные.
Вот моя модель, которую я создал:
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": ""xxxxxxxxxxxxx"",
"pageInfo": {
"totalResults": 4,
"resultsPerPage": 10
},
"items": [
{
"kind": "youtube#playlistItem",
"etag": ""xxxxxx"",
"id": "xxxxxx",
}
}
Интересно то, что атрибут etag успешно сопоставляется, но не атрибут id, поскольку он дает мне ноль, когда я получаю ответ.
Есть идеи, что может быть причиной?
В моем Xcode, когда я печатаю свой объект, я получаю следующий вывод:
Печать описания видеоданных:
▿ ItemsModel
▿ kind : Optional<String>
- some : "youtube#playlistItemListResponse"
▿ etag : Optional<String>
- some : ""Xxxxxxxxx""
- id : nil
Ответ №1:
Вы пытаетесь получить id
, но у вас есть pageInfo
или items
нет. Вам нужно пойти глубже и получить путь ["items"][0]["id"]
Вы пытаетесь получить идентификатор непосредственно из объекта, но нужный вам объект расположен глубже.
Вам нужно создать 3 структуры для main object
, для объекта с ключом "pageInfo"
, для объектов с ключом "items"
.
Комментарии:
1. Большое вам спасибо, я понял, что перепутал иерархию своих данных json. Я реструктурировал и создал модели (main object и pageInfo) для сопоставления моих данных, и это сработало ..!