私はAPIからの応答を使用してJSONとして解析しています。Swift 3 JSON解析例外
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! [String: AnyObject]
let status = readableJSON["status"] as! String
if status == "success" {
if let profileInfo = readableJSON["profile_info"] {
let stb = UIStoryboard(name: "Main", bundle: nil)
let vcVerifyOTP = stb.instantiateViewController(withIdentifier: "verify_otp") as! VCVerifyOTP
vcVerifyOTP.sessionID = readableJSON["otp_session_id"] as! String
vcVerifyOTP.userID = readableJSON["customer_id"] as! String
vcVerifyOTP.first_name = profileInfo["firstname"] as! String
vcVerifyOTP.last_name = profileInfo["lastname"] as! String
vcVerifyOTP.email_id = profileInfo["email"] as! String
vcVerifyOTP.phone_number = profileInfo["mobile"] as! String
let scores = profileInfo["scores"] as! [String: AnyObject]
vcVerifyOTP.gmat = scores["gmat"] as! String
vcVerifyOTP.gre = scores["gre"] as! String
vcVerifyOTP.ielts = scores["ielts"] as! String
vcVerifyOTP.tofel = scores["tofel"] as! String
self.present(vcVerifyOTP, animated: true, completion: nil)
}
} else {
let alert = UIAlertController(title: "Error", message: "Login Unsuccessful.", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
上記のコードは、「スコア」JSONObjectにデータが含まれていれば問題ありませんが、ブランクのアプリケーションがクラッシュした場合はうまく動作します。 "成功"、 "otp_session_id": "someValueの"、 "CUSTOMER_ID": "someValueの"、 "profile_info": { 'スコア' はデータが含まれている場合
{ "ステータス"(応答です) "FIRSTNAME": "someValueの"、 "姓": "someValueの"、 "電子メール": "someValueの"、 "モバイル": "someValueの"、 "スコア": { "GMAT": "someValueの"、 " gre ":" somevalue "、 " ielts ":" somevalue "、 " tofel ":" somevalue " } } }
'スコア' はDATA(応答である)(ERRORを与える) { "ステータス" が含まれていない場合: "成功"、 "otp_session_id": "someValueの"、 "CUSTOMER_IDを": "someValueの"、 "profile_info": { "FIRSTNAME": "someValueの"、 "姓": "someValueの"、 "電子メール": "someValueの"、 "モバイル": "someValueの"、 「スコア":[0] } }
どういうことが起こっているのですか?「スコア」内にデータがある場合はJSONObjectとして表示され、「スコア」内にデータがない場合はJSONArrayとして返されます。
配列がクラッシュすると、私は多くのことを試みましたが、私はこの例外をキャッチできません。私は値がJSONObjectかJSONArrayかどうかをチェックしようとしましたが、まだ成功しませんでした。助けてください。
の代わりに、すべて自分で処理してください。 ObjectMapperやSwiftyJsonのようなライブラリを使わないのはなぜですか? –
最初にスコアがデータ(キー、値)を含んでいるかどうかを確認する必要があるかどうかを確認します。 –
はい、それは簡単ですが、問題があるので、私の新しいライブラリを避けようとしています。 – xSHERU