Парсинг JSON swift 5

json

#1

Есть приложение которое по нажатию на кнопку берет рандомную картинку и текст. С картинкой все понятно, а вот с текстом не получается. Подскажите в чем проблема

Собственно код

import UIKit

struct LabelText: Decodable {
var textField: String
}

class ViewController: UIViewController {

private let imageUrl = "https://picsum.photos/200"
private let unsultUrl = "https://evilinsult.com/generate_insult.php?lang=en&type=json"

@IBOutlet var button: UIButton!
@IBOutlet var imageView: UIImageView!
@IBOutlet var messageLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    
}

@IBAction func actionButton() {
    fetchImage()
    insultMessag()
}
private func fetchImage(){
    guard let url = URL(string: imageUrl) else { return }
    let session = URLSession.shared
    session.dataTask(with: url) { (data, response, error) in
        if  let error = error {
            print(error.localizedDescription)
            return
        }
        if let response = response {
            print(response)
        }
        if let data = data, let image = UIImage(data: data){
            DispatchQueue.main.async {
            self.imageView.image = image
        }
    }
    }.resume()
}

private func insultMessag(){
    guard let insultMsg = URL(string: unsultUrl) else { return }
    
    URLSession.shared.dataTask(with: insultMsg) { (data, response, error) in
        if  let error = error {
            print(error.localizedDescription)
            return
        }
        if let response = response {
            print(response)
        }
        guard let data = data else { return }
        do{
            let message = try JSONDecoder().decode(LabelText.self, from: data)
            self.messageLabel.text = message.textField
        } catch let error{
            print(error)
        }
    }.resume()
    
    
        
}

}


#2

А вы пробовали запускать только один запрос, на получение текста?


#3

json-объект имеет совсем другой формат, чем в структуре

Код1

{
“number”:“112”,
“language”:“en”,
“insult”:“If I wanted to kill myself, I would climb to the number of your chromosomes and then jump to your IQ.”,
“created”:“2020-10-14 12:01:10”,
“shown”:“48640”,
“createdby”:"",
“active”:“1”,
“comment”:""
}

то есть структура должна быть примерно такой

Код2

class MyJson: Codable {
var number = “”
var language = “”
var insult = “”
var created = “”
var shown = “”
var createdby = “”
var active = “”
var comment = “”
}

let message = try JSONDecoder().decode(MyJson.self, from: data)
self.messageLabel.text = message.insult

вопрос собственно закрыт