iOS - JSONSerialization VS JSONДекодер и использование - PullRequest
0 голосов
/ 02 декабря 2018

Итак, я получаю следующее json:

 {
"output": [
"{\"cameraIsOnboarded\" : true}"
 ],
"exit_code": 0
}

Я попытался декодировать его с помощью следующей модели:

struct CameraOnboard: Codable {

  var output: [Output]
  //var exit_code: Int?
 }

struct Output: Codable {

  var cameraIsOnboarded: Bool?
}

И затем использовать это в моем парсере:

        let infoString = try JSONDecoder().decode(CameraOnboard.self, from: data)

но это не работает.

Затем я попытался использовать JSONSerialization, потому что мне показалось, что у меня проблема с ключом \ "cameraIsOnboarded \", поэтому я получил строку результата alamofire и попытался выполнить следующее:

   let jsonData = data.data(using: .utf8)

    var dic: [String : Any]?
    do {
        dic = try JSONSerialization.jsonObject(with: jsonData!, options: []) as? [String : Any]
    } catch {
        print(error.localizedDescription)
    }

    print(dic!)
    if let outPutArr  = dic?["output"] as? NSArray {
        print(outPutArr)

        if let first = outPutArr.firstObject {
            print(first)

            //let val =  first["cameraIsOnboarded"]
           // print(val!)
        }
    }

так, как указано выше, я пока не знаю, как извлечь значение, я печатаю:

{"cameraIsOnboarded": true}

, если я делаю следующее:

  if let first = outPutArr.firstObject as? [String: Bool] {
            print(first)

            //let val =  first["cameraIsOnboarded"]
           // print(val!)
        }

это не шаг внутри.

Спасибо

1 Ответ

0 голосов
/ 02 декабря 2018

JSON должен выглядеть следующим образом (рекомендуется)

{
    "output": {
        "cameraIsOnboarded" : true
    },
    "exit_code": 0
}

Вы можете использовать это для обработки текущего случая

do {
   let  dic = try JSONSerialization.jsonObject(with: str.data(using: .utf8)!, options: []) as! [String : Any]
    if let outPutArr  = dic["output"] as? [String] {
         if let first = outPutArr.first {
           let dic = try JSONSerialization.jsonObject(with: (first as! String).data(using: .utf8)!, options: []) as! [String : Bool]
            print(dic["cameraIsOnboarded"])
        }
    } 
    } catch {
        print(error)
    }
...