Буквенно-цифровой идентификатор не отображается, но выдает нулевой результат

#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) для сопоставления моих данных, и это сработало ..!