【问题标题】:get data from json, but my data not array, swift 3从json获取数据,但我的数据不是数组,swift 3
【发布时间】:2019-03-13 22:04:57
【问题描述】:

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

这是我的错误

【问题讨论】:

    标签: ios json swift swift3


    【解决方案1】:

    变化:

    let id_user = parsedResult["id_user"].array 
    

    到:

    let id_user = parsedResult["id_user"].dictionary
    

    因为您的 json 正在返回字典。

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

    【讨论】:

    • 帮帮我
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        只需更改,
        let id_user = parsedResult["id_user"].array

        let id_user = parsedResult["id_user"].dictionary

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-15
          • 2020-02-22
          • 2018-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多