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

Kotlin中如何对API返回的动态JSON类型(String/JsonArray)进行类型检查(避免try/catch)

如何在Kotlin中安全检查动态JSON字段的类型(String/JsonArray)

你遇到的问题很典型:API返回的字段类型不确定,要么是单个字符串(对应JsonPrimitive),要么是字符串数组(JsonArray),但你之前的代码错误地判断了JsonObject而非JsonPrimitive,导致单个字符串的情况完全没被处理。而且用try/catch确实不是优雅的做法,咱们用Kotlin的类型判断就能完美解决。

先看你之前的代码问题:单个字符串类型的JSON值会被解析为JsonPrimitive,而不是JsonObject,所以你的第一个分支永远不会命中这种情况。

修正后的实现代码

val myData = optional.get("keyOfData")
when(myData) {
    is JsonPrimitive -> {
        // 处理单个字符串的场景
        val singleString = myData.asString
        when (singleString) {
            // 这里写你针对单个字符串的操作逻辑
        }
    }
    is JsonArray -> {
        // 处理字符串数组的场景
        myData.forEach { element ->
            // 额外做一层安全检查,确保数组元素是字符串类型的JsonPrimitive
            if (element is JsonPrimitive && element.isString) {
                val itemString = element.asString
                when (itemString) {
                    // 这里写针对数组中每个字符串的操作逻辑
                }
            }
        }
    }
    // 可选:处理其他意外类型(比如JsonObject或者null)
    else -> {
        // 可以加日志提示,或者默认处理逻辑
    }
}

几个关键点:

  • 优先判断JsonPrimitive:这是单个字符串对应的类型,必须把这个分支加上,才能覆盖API返回单个值的情况。
  • 数组元素的安全校验:遍历JsonArray时,最好检查每个元素是不是字符串类型的JsonPrimitive——避免API返回的数组里混有其他类型(比如数字、对象)导致调用asString时出错。
  • 完全避免try/catch:用Kotlin的is类型判断,既清晰又高效,比依赖异常捕获处理类型分支靠谱多了。

内容的提问来源于stack exchange,提问作者Dim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:57:37