从 json 获取数据,但我的数据不是数组,swift 3

get data from json, but my data not array, swift 3

我已收到 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")
        }
}

这是我的错误

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!)

变化:

let id_user = parsedResult["id_user"].array 

至:

let id_user = parsedResult["id_user"].dictionary

因为您的 json 返回的是词典。

然后您可以附加到您的标签。

从您的回复看来,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]
}

您正在尝试将 parsedResult 作为数组获取,这将导致 id_user 为零。因此,错误。 由于 parsedResult 是字典,根据上面显示的 json 响应,您需要将 parsedResult 作为字典阅读。

简单改变,
let id_user = parsedResult["id_user"].array

let id_user = parsedResult["id_user"].dictionary