Получение данных из массива JSON

json
swift

#1

Добрый день , пытаюсь получить определенный массив данных из JSON (в количестве трех наименований в каждом TableView). 1 TableViewController - Packages, 2 TableViewController - Icon и т.д. Но вместо этого получаю весь массив наименований в первом tableview. где я допустил ошибку ?

{
    "data": [
        {
            "title": "Packages",
            "group": "packages",
            "products": [
                {
                    "id": 1,
                    "title": "Tiny Package",
                    "description": "<div>This is the chippest package ever.</div>",
                    "image": 
                    "price": 1,
                    "group": "packages",
                    "multiple": false,
                    "active": true,
                    "already_bought": false
                },
                {
                    "id": 2,
                    "title": "Standard Package",
                    "description": "<div>The Standard Package</div>",
                    "image": 
                    "price": 10,
                    "group": "packages",
                    "multiple": true,
                    "active": true,
                    "already_bought": false
                },
                {
                    "id": 3,
                    "title": "VIP Package",
                    "description": "<div>The VIP Package</div>",
                    "image": 
                    "price": 100,
                    "group": "packages",
                    "multiple": true,
                    "active": true,
                    "already_bought": true
                }
            ]
        },
        {
            "title": "Icon Sets",
            "group": "icons",
            "products": [
                {
                    "id": 4,
                    "title": "Smile Icon Set",
                    "description": "<div>SMILE icon set</div>",
                    "image": 
                    "price": 5,
                    "group": "icons",
                    "multiple": false,
                    "active": true,
                    "already_bought": true
                }
            ]
        },
        {
            "title": "Stickers",
            "group": "stickers",
            "products": [
                {
                    "id": 5,
                    "title": "VIP Sticker Pack",
                    "description": null,
                    "price": 10,
                    "group": "stickers",
                    "multiple": false,
                    "active": true,
                    "already_bought": true
                }
            ]
        }
    ]
}

import Foundation
import UIKit

class PackagesProvider: RequestClient {
    
    func send(completionHandler: @escaping (_ items: [ItemPackages], _ last_page: Int) -> Void) {
        request(completionHandler: {json in
            var items: [ItemPackages] = []
            var last_page = 0
            last_page = json["last_page"].intValue
            for index in 0..<json["data"].count {
                items.append(ItemPackages(json["data"][index]))
            }
            completionHandler(items, last_page)
        })
    }
}

func getData() {
    labelNoOne.isHidden = true
    Async.main {
        if self.firstload {
            self.tableView.isHidden = true
        }
        self.view.makeToastActivity(.center)
    }
    let request = PackagesProvider()
    request.setURL(api.getProductsTree)
    request.send(completionHandler: {items, last_page in
        self.items += items
        self.last_page = last_page
        self.tableRefresh()
        
        
    })
}

#2

Покажите саму модель ItemPackages.
На выходе у вас данные в self.items правильно парсятся?
Ну и как вы передаете данные для каждой таблицы?


#3
import Foundation
import SwiftyJSON

class ItemPackages {
    
    var id: String
    var img: String
    var name: String
    var description: String
    var value: Int
    var price: Double
    
    init(_ json: JSON) {
        self.id = json["id"].stringValue
        self.name = json["title"].stringValue
        self.description = json["description"].stringValue
        self.img = ""
        self.price = json["price"].doubleValue
        self.value = json["value"].intValue
        
    }
}

self.items = берет только значения “title” (“title”: “Stickers”, “title”: “Packages”…)


#4

Так у вас парсинг не правильный.
У вас нету свойства products, который как раз и будет содержать в себе ваши продукты для каждой группы.


#5

Спасибо Вам большое за ответ. Буду искать информацию как брать информацию из определенного массива. На форуме , к сожалению , не нашел