私は何をしているのかを簡単に説明しています。ログイン画面のユーザーが電子メールを入力し、検証ビューがポップアップします。ユーザーの電子メール、ユーザーの電子メール+認証コードが一致した場合、彼は正常にログインし、バックエンドはユーザーのフル情報+固有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)")
}
あなたは1ライン/条件に三つの "せ" のテストを置きます。どのテストが合格しなかったのか理解してください。 JSONはトップレベルの配列であり、辞書を1つ含むオブジェクトです。だから 'json'は' [[String:Any]] 'でなければなりません。それから、あなたのIDは 'json [0] [" BD_Id "]' – Larme
でなければなりません。Swift 3では、 'request'行を' var request = URLRequest(url:URL(string: "http: /anydomain.com/verif.php ")!)'を実行し、 'as URLRequest'キャストを削除します。両方のエンコーディングを '.utf8'に減らすことができます – vadian