Как получить конкретное значение json в Swift 5?

Мне нужно значение «успеха» в объекте json, но проблема в том, что я получаю все данные json. Я хочу, чтобы напечаталось только значение «успех»

Вот мой json`

{
   response = { 
                success = 1; 
                successmsg = "Successful Connection"; 
              };
}`

Вот мой код в Swift 5

    @IBAction func girisButtonTap(_ sender: Any) {
        var txtusername: String
        var txtpassword: String
        txtusername = usercodeText.text!
        txtpassword = passwordText.text!
        let Url = String(format: "http://10.10.10.53:8080/sahambl/rest/sahamblsrv/userlogin")
        guard let serviceUrl = URL(string: Url) else { return }
        let parameters: [String: Any] = [
            "request": [
                "xusercode" : "\(txtusername)",
                "xpassword": "\(txtpassword)"
            ]
        ]
        var request = URLRequest(url: serviceUrl)
        request.httpMethod = "POST"
        request.setValue("Application/json", forHTTPHeaderField: "Content-Type")
        guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else {
            return
        }
        request.httpBody = httpBody
        request.timeoutInterval = 20
        let session = URLSession.shared
        struct ResponseJSON: Codable {
            let response: Response
        }
        struct Response: Codable {
            let success: Int
            let successmsg: String
        }
        session.dataTask(with: request) { (data, response, error) in
            if let response = response {
                print(response)
            }
            if let data = data {
                do {
                    let json = try JSONDecoder().decode(ResponseJSON.self, from: data)
                    print(json)
                    let successful = json.response.success == 1
                } catch {
                    print(error)
                }
                }
            }.resume()
    }
}

Буду благодарен за любой прогресс.


person Mehmet Özcan    schedule 12.03.2020    source источник


Ответы (1)


Используйте структуру модели и Codable для синтаксического анализа:

struct ResponseJSON: Codable {
    let response: Response
}

struct Response: Codable {
    // depending on what your JSON actually looks like, this could also be
    //   let success: Bool
    let success: Int

    let successmsg: String
}

session.dataTask(with: request) { data, response, error in
  if let response = response {
      print(response)
  }
  if let data = data {
    do {
      let json = try JSONDecoder().decode(ResponseJSON.self, from: data)
      print(json)

      // access the success property:
      let successful = json.response.success == 1 
      // leave off the "== 1" if it's a Bool
    } catch {
       print(error)
    }
  }
}.resume()


person Gereon    schedule 12.03.2020
comment
Прежде всего, большое спасибо за ваш ответ. Я новичок в программном обеспечении Swift. ............ if let data = data {do {let json = try JSONSerialization.jsonObject (with: data, options: []) print (JSON) Мне нужно прочитать success = 1 в печати (json) вывод. Где мне написать код, который вы предоставили в моей программе? - person Mehmet Özcan; 12.03.2020
comment
let success = json.response.success == 1 * Значение типа «Любой» не имеет элемента «ответ». Я получаю сообщение об ошибке. - person Mehmet Özcan; 12.03.2020
comment
Тогда вы не запускаете мой код. Мой json относится к типу ResponseJSON, а не Any - person Gereon; 12.03.2020
comment
Вам придется избавиться от вызова JSONSerialization.jsonObject в коде и заменить его вызовом JSONDecoder().decode(...), который я вам показал. - person Gereon; 12.03.2020
comment
Я внес изменения, которые вы сказали, но я получил результат в соответствии с программой, описанной выше. - person Mehmet Özcan; 13.03.2020
comment
Пожалуйста, прочтите внимательно эти сообщения. Опубликованный вами вывод JSON имеет successmsg, ваш код пытается получить доступ к successmsg. - person Gereon; 13.03.2020
comment
Отлично, это сработало. Я очень ценю, большое вам спасибо. - person Mehmet Özcan; 13.03.2020