如何仅在JSON数据success=true时跳转至下一个ViewController
实现基于JSON success字段的页面跳转逻辑
首先,核心逻辑很清晰:先解析接口返回的JSON数据,判断success字段是否为true,再触发页面跳转动作。下面我结合移动端常见的iOS(Swift)和Android(Kotlin)场景,给你具体的实现示例:
iOS Swift 实现方案
方式1:基础JSON解析+判断
假设你已经通过URLSession拿到了接口返回的Data对象,直接解析判断:
// 处理接口返回的data do { guard let jsonDict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else { print("JSON格式错误,无法解析") return } // 取出success字段做判断 if let isSuccess = jsonDict["success"] as? Bool, isSuccess { // 跳转至目标ViewController let targetVC = NextViewController() // 替换成你的目标VC类名 // 导航栏跳转 navigationController?.pushViewController(targetVC, animated: true) // 如果是模态跳转,用下面这句 // present(targetVC, animated: true) } else { // success为false或解析失败,处理错误提示 let errorMsg = jsonDict["message"] as? String ?? "操作失败" let alert = UIAlertController(title: "提示", message: errorMsg, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) } } catch { print("JSON解析出错:\(error.localizedDescription)") }
方式2:用Codable模型解析(更优雅)
定义对应的数据模型,让解析逻辑更清晰,还能直接拿到用户详情:
// 定义JSON对应的模型结构 struct LoginResponse: Codable { let success: Bool let message: String let userDetails: UserDetails // 映射JSON中的下划线字段 enum CodingKeys: String, CodingKey { case success, message case userDetails = "User_details" } } struct UserDetails: Codable { let userId: String let userName: String let phone: String let email: String let image: String enum CodingKeys: String, CodingKey { case userId = "user_id" case userName = "user_name" case phone, email, image } } // 解析并处理跳转 do { let responseModel = try JSONDecoder().decode(LoginResponse.self, from: data) if responseModel.success { // 跳转时还能把用户信息传给目标VC let targetVC = NextViewController() targetVC.userInfo = responseModel.userDetails navigationController?.pushViewController(targetVC, animated: true) } else { print("操作失败:\(responseModel.message)") // 这里可以加弹窗提示用户 } } catch { print("模型解析错误:\(error)") }
Android Kotlin 实现方案
用Gson配合数据类解析,再处理跳转:
// 定义对应的数据类 data class LoginResponse( val success: Boolean, val message: String, @SerializedName("User_details") val userDetails: UserDetails ) data class UserDetails( @SerializedName("user_id") val userId: String, @SerializedName("user_name") val userName: String, val phone: String, val email: String, val image: String ) // 解析并执行跳转(假设用OkHttp拿到响应) val jsonContent = response.body()?.string() ?: "" val loginResponse = Gson().fromJson(jsonContent, LoginResponse::class.java) if (loginResponse.success) { // 跳转至目标Activity val intent = Intent(this, NextActivity::class.java) // 可选:传递用户详情 intent.putExtra("USER_INFO", loginResponse.userDetails) startActivity(intent) } else { // 失败提示 Toast.makeText(this, loginResponse.message, Toast.LENGTH_SHORT).show() }
关键注意点
- 网络请求必须在后台线程执行,页面跳转一定要切回主线程(iOS用
DispatchQueue.main.async,Android用runOnUiThread或Coroutine) - 务必处理JSON解析失败的异常,避免App崩溃
- 如果需要传递用户信息,直接把解析后的模型对象传给目标页面即可
内容的提问来源于stack exchange,提问作者Vijay Tanala
相关产品推荐
相关产品推荐

