@YeahCode

Значение из сложной структуры Json — Codable + Alamofire?

Ребята, подскажите
Изучаю парсинг Json, работаю с многомерным массивом данных. И не совсем понимаю как правильно достучаться до некоторых данных, буду признателен за подсказки, как сделать правильно

1. Метод
Alamofire.request(serviceName, method: .get, parameters: parameters).validate().responseJSON { response in
            
            let jsonDecoder = JSONDecoder()

            switch(response.result) {
            case .success:
                if let data = response.data {

                do {
                    let json = try jsonDecoder.decode(TopLevel.self, from: data)
                    print("\nJson", json.graph?.shortMedia?.edgeMediaUser?.edges ?? "\nJson nil\n")
                    // При таком пути, получаю массив юзеров (но мне требуются данные которые глубже, в самом этот массиве), но если постучаться к ним, через структуру к примеру требуемого массива, то будет nil. 
                    
                    let taggedUser = try jsonDecoder.decode(EdgeMediaEdge.self, from: data)
                    print("\n-------------1-------------", tUser) // nil
                    print("\n-------------1-------------", tUser.node?.user) // ni
                    
                    let tentacledNode = try jsonDecoder.decode(TeNode.self, from: data)
                    print("\n-------------2-------------", tenNode.user) // ni 
                    
                    let owner = try jsonDecoder.decode(Owner.self, from: data)
                    print("\n-------------3-------------", owner.fullName) // ni
                    completion(json, nil)
                    // .....



// MARK: - TopLevel
struct TopLevel: Codable {
    let graph: Graph?
}

// MARK: - Graph
struct Graph: Codable {
    let shortMedia: ShortMedia?
    
    enum CodingKeys: String, CodingKey {
        case shortMedia = "shortmedia"
    }
}

// MARK: - ShortMedia
struct ShortMedia: Codable {
    let typename, id, shortcode: String?
    let edgeMediaUser: EdgeMediaUser?
    let owner: Owner?
    
    enum CodingKeys: String, CodingKey {
        case typename = "tname"
        case id, shortcode, dimensions
        case edgeMediaUser = "edge_media__user"
        case owner
    }
}


// MARK: - OwnerClass
struct OwnerClass: Codable {
    let id: String?
    let username, fullName: String?
    
    enum CodingKeys: String, CodingKey {
        case id
        case username
        case fullName = "fname"
    }
}

// MARK: - EdgeMediaUser
struct EdgeMediaUser: Codable {
    let edges: [EdgeMediaUserE]?
}

// MARK: - EdgeMediaUserE
struct EdgeMediaUserE: Codable {
    let node: TenNode?
}

// MARK: - TenNode
struct TenNode: Codable {
    let user: OwnerClass?
    let x, y: Double?
}


// MARK: - Owner
struct Owner: Codable {
    let id: String?
    let username: String?
    let fullName: String?
    
    enum CodingKeys: String, CodingKey {
        case id = "id"
        case username
        case fuName = "funame"
    }
}
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы