Search code examples
jsonswiftalamofire

swift 4 Parse JSON without keys with Alamofire


Guys i want to get all names from JSON (screenshot below) and put them to tableView. The problem is...i got dictionary with this code. Now, how i can get each name value and put them on tableView.

func getDataFromApi(){
    Alamofire.request("https://api.coinmarketcap.com/v2/listings/").responseJSON{ response in

        if let locationJSON = response.result.value{
            let locationObject: Dictionary = locationJSON as! Dictionary<String, Any>
            for (key, value) in locationObject {
                print("id:\(key), value:\(value)")
            }
        }
    }
}

enter image description here


Solution

  • I would suggest convert the dictionaries response to a Currency object:

    class Currency: NSObject {
        var id: Int!
        var name: String!
        var symbol: String!
        var websiteSlug: String!
    
        init(id: Int, name: String, symbol: String, websiteSlug: String) {
            super.init()
    
            self.id = id
            self.name = name
            self.symbol = symbol
            self.websiteSlug = websiteSlug
        }
    }
    

    Then under the variables' section define the currencies array:

    var currencies = [Currency]()
    

    Finaly change the getDataFromApi implementation to this:

    func getDataFromApi() {
        Alamofire.request("https://api.coinmarketcap.com/v2/listings/").responseJSON{ response in
            if let locationJSON = response.result.value as? [String: Any] {
                let data = locationJSON["data"] as! [[String: Any]]
                for dataItem in data {
                    let currency = Currency(id: dataItem["id"] as! Int,
                                            name: dataItem["name"] as! String,
                                            symbol: dataItem["symbol"] as! String,
                                            websiteSlug: dataItem["website_slug"] as! String)
    
                    self.currencies.append(currency)
                }
    
                print(self.currencies)
            }
        }
    }
    

    I always suggest model the responses to objects because it allows you to do a better managing of the data you need to display on screen and keep your code structure organised.

    Now you can easily show the data in a UITableView object from the currencies array.