You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:08:46