JSON Parsing Swift с использованием JSONPlaceholder - PullRequest
0 голосов
/ 21 февраля 2019

Я играю со Swift и JSONPlaceholder.Я хочу получить все данные, содержащиеся в: https://jsonplaceholder.typicode.com/photos

Я создал функцию, которая присоединяется к URL, загружая JSON, но тогда я не знаю, как мне получить заголовок и thumbnailUrl дляпередать затем для заполнения tableView.В прошлом я использовал этот код, но теперь он не работает, потому что в JSONPlaceholder нет массива.

Какая-нибудь помощь для переупорядочения кода для чтения и получения элементов jsonplaceholder?

func loadList(){

    let url = URL(string: urlReceived)

    var myNews = NewInfo()

    let task = URLSession.shared.dataTask(with: url!) {
        (data, response, error) in

        if error != nil{
            print("ERROR")
        }
        else{
            do {
                if let content = data{
                    let myJson = try JSONSerialization.jsonObject(with: content, options: .mutableContainers)

                    //print(myJson)
                    if let jsonData = myJson as? [String : Any] {

                        if let myResults = jsonData["list"] as? [[String : Any]]{
                            //dump(myResults)

                            for value in myResults{
                                //Read time string from root
                                if let time = value ["dt_txt"] as? String{

                                    myNews.time = time
                                }
                                //Read main container
                                if let main = value["main"]
                                    as? [String : Any]{
                                    if let temperature = main["temp"] as? Double {
                                        myNews.temperature = String(temperature)
                                    }
                                }
                                //Read from weather container
                                if let weather = value["weather"] as? [[String: Any]]{
                                    for value in weather{
                                        if let weatherContent = value["description"] as? String{
                                            myNews.weatherDescription = weatherContent
                                        }
                                    }
                                }


                                self.myTableViewDataSource.append(myNews)

                            }
                            dump(self.myTableViewDataSource)

                            DispatchQueue.main.async {
                                self.tableView.reloadData()
                            }

                        }

                    }
                }
            }
            catch{

            }
        }
    }
    task.resume()
}//End func

1 Ответ

0 голосов
/ 21 февраля 2019

Окей, поэтому с Alamofire + SwiftyJSON вы можете сделать это:

func loadList(){

    let url = "https://jsonplaceholder.typicode.com/photos"
    AF.request(url).responseJSON { (response) in
        switch response.result {
        case .success(let value):
            let json = JSON(value)
            print(json)

            for value in json.arrayValue {
                let url = value.dictionaryValue["url"]!.stringValue
                let albumId = value.dictionaryValue["albumId"]!.stringValue
                let thumbnailUrl = value.dictionaryValue["thumbnailUrl"]!.stringValue
                let id = value.dictionaryValue["id"]!.stringValue
                let title = value.dictionaryValue["title"]!.stringValue

                // Add this album to array.
                let album = AlbumModel(id: id, albumId: albumId, title: title, thumbnailUrl: thumbnailUrl)
                albums.append(album)

            }
        case .failure(let error):
            print(error)
        }

    }
}

РЕДАКТИРОВАТЬ:

Я сделал модель для значений

class AlbumModel {

var id: String?
var albumId: String?
var title: String?
var thumbnailUrl: String?

init(id: String?, albumId: String?, title: String?, thumbnailUrl: String?){

    self.id = id
    self.albumId = albumId
    self.title = title
    self.thumbnailUrl = thumbnailUrl

   }
}

После этого просто создайте массив, подобный var albums = [AlbumModel](), и вы можете добавить к нему все альбомы.Легко использовать после в tableViewcell (пример: albums[indexPath.row].id)

...