2017-02-07 8 views
0

私は何をしているのかを簡単に説明しています。ログイン画面のユーザーが電子メールを入力し、検証ビューがポップアップします。ユーザーの電子メール、ユーザーの電子メール+認証コードが一致した場合、彼は正常にログインし、バックエンドはユーザーのフル情報+固有IDで応答します。 だから私は一意のIDだけを取得したい。Swift 3のJSONから指定された値を取得できません

私の検証のViewControllerコード:

@IBAction func doneBtnPressed(_ sender: Any) { 

    let request = NSMutableURLRequest(url: NSURL(string: "http://anydomain.com/verif.php")! as URL) 
    request.httpMethod = "POST" 
    let postString = "bdemail=\(bdEmail)&verifcode=\(verifyCodeTxtField.text!)" 
    request.httpBody = postString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     }else { 
      do { 
       if let data = data, 
        let json = try JSONSerialization.jsonObject(with: data) as? [String: Any], 
        let users = json["BD_Id"] as? [[String: Any]] { 
        print(users) 
       } 
      } catch { 
       print("Error deserializing JSON: \(error)") 
      } 
     } 

     print("response = \(response)") 

     let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
     print("responseString = \(responseString)") 
    } 

    task.resume() 

    self.performSegue(withIdentifier: "mySegueIdentifier", sender: nil) 

} 

しかし、私は唯一の完全な応答を取得し、私は一意のIDを取得したい - 私はそれを使用するためにそれを保存することができますので、一人で>「BD_Idを」私のアプリ。ここで

が応答である:

{ URL: http://anydomain.com/verif.php } { status code: 200, headers { 
    Connection = "Keep-Alive"; 
    "Content-Type" = "text/html; charset=UTF-8"; 
    Date = "Tue, 07 Feb 2017 07:40:00 GMT"; 
    Server = Apache; 
    "Transfer-Encoding" = Identity; 
} }) 


responseString = Optional( [{"Rcode":101,"BD_Id":"8","BD_Name":"","BD_Email":"[email protected]","BD_Country":"","BD_Home_Lat":"","BD_Home_Lon":"","BD_BT":"","BD_RH":"","BD_DOB":"0000-00-00","BD_Mobile":"","BD_Last_Donation":"0000-00-00","BD_Token":""}]) 

IDをプリントアウトdid'tので、私のミスは何ですか?

ありがとうございます。また、私はSwift Networkingの初心者であり、初めてJSONを扱うことになっています。

UPDATE 1:

私は、次のコードを試してみましたが、まだ動作しませんでした、とprint文が出て来なかった、データが空||はnilであることを意味しているが、それはそうかもし最後のprintステートメントはJSONスクリプト全体を表示します。

let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     }else { 
      do { 
       if data != nil { 
        print("Hello from the inside...") 
        let json = try JSONSerialization.jsonObject(with: data!) as? [[String: Any]] 
        for obj in json! { 
         if let bdId = obj["BD_Id"] as? String { 
          print(bdId) 
         } 
        } 
       } 
      } catch { 
       print("Error deserializing JSON: \(error)") 
      } 
     } 

     print("response = \(response)") 

     let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
     print("responseString = \(responseString)") 
    } 
+0

あなたは1ライン/条件に三つの "せ" のテストを置きます。どのテストが合格しなかったのか理解してください。 JSONはトップレベルの配列であり、辞書を1つ含むオブジェクトです。だから 'json'は' [[String:Any]] 'でなければなりません。それから、あなたのIDは 'json [0] [" BD_Id "]' – Larme

+0

でなければなりません。Swift 3では、 'request'行を' var request = URLRequest(url:URL(string: "http: /anydomain.com/verif.php ")!)'を実行し、 'as URLRequest'キャストを削除します。両方のエンコーディングを '.utf8'に減らすことができます – vadian

答えて

2

...あなたのJSONは、辞書の配列でこれを試してみてください。.. [[String:Any]]

do{ 
     let json = try JSONSerialization.jsonObject(with: data!, options:[]) as! [[String:Any]] 
      for obj in json { 
       if let bdId = obj["BD_Id"] as? String { 
        print(bdId) 
       } 
      } 
    } 
    catch { 
     print("Error with Json: \(error)") 
    } 
+0

私の更新を確認してください –

+0

ありがとう、今働きました –

関連する問題