получить данные из JSON, но мои данные не массив, Swift 3 - PullRequest
0 голосов
/ 09 октября 2018

Я получил ответ от json и хочу получить его для своей переменной, но в ответе нет массива

{
"status": true,
 "msg": "Login berhasil. username=081xxxxxx reg_id=",
"id_user": {
      "no": "349",
      "nama_teknisi": "Putra Utama",
      "telp_teknisi": "081xxxxx"
    }
}

У меня есть код, но все равно ошибка, это мой код:

Alamofire.request(URL_USER_LOGIN, method: .get).authenticate(user: username!, password: password!).responseJSON { response in
        if let error = response.error{
            self.hideLoading()
            return
        }
        debugPrint(response.result.value!)
        let parsedResult = JSON(response.result.value!)

        var successed:Bool = true
        if let success = parsedResult["status"].bool{
            successed = success
        }

        if successed {
            OperationQueue.main.addOperation {
                print("success")
                self.hideLoading()
                let id_user = parsedResult["id_user"].array
                for id_item in id_user! {
                    self.lbnama.append(id_item["nama_teknisi"].string!)
                    self.lbtelp.append(id_item["telp_teknisi"].string!)
                    self.keychain.set(self.lbnama, forKey: "nama_key")
                    self.keychain.set(self.lbtelp, forKey: "telp_key")
                    print(self.keychain.get("nama_key"))
                }
            }
        } else {
            print("error")
        }
}

и это моя ошибка

enter image description here

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Вы пытаетесь получить parsedResult в виде массива, в результате id_user будет равно нулю.Отсюда и ошибка.Поскольку parsedResult является словарем, в соответствии с ответом json, который вы показали выше, вам нужно прочитать parsedResult как словарь.

Просто изменить,
let id_user = parsedResult["id_user"].array
на
let id_user = parsedResult["id_user"].dictionary

0 голосов
/ 09 октября 2018

Измените:

let id_user = parsedResult["id_user"].array 

на:

let id_user = parsedResult["id_user"].dictionary

Поскольку ваш json возвращает словарь.

Затем вы можете добавить свою метку.

0 голосов
/ 09 октября 2018

Из вашего ответа кажется, что parsedResult["id_user"] это не массив, а словарь.Поэтому вы должны использовать:

let id_user = parsedResult["id_user"].array

Но если вы не уверены, будет ли parsedResult["id_user"] массивом словаря, вы можете обработать его следующим образом.

var id_user: [Any] = []
let idUserObj = parsedResult["id_user"]
if let arr = idUserObj as? [Any] {
    id_user = arr.array
} else if let dict = idUserObj as? [String: Any] {
    id_user = [arr.dictionary]
}
0 голосов
/ 09 октября 2018

id_user - это словарь, а не массив, поэтому

let id_user = parsedResult["id_user"].dictionary // dictionaryValue
self.lbnama.append(id_user["nama_teknisi"].string!)
self.lbtelp.append(id_user["telp_teknisi"].string!)
...