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

Android Kotlin解析JSON时null转JSONObject报错的解决方法

解决JSON解析null字段触发的转换异常问题

问题根源

使用getJSONObject("Geocode")和getJSONObject("Scores")时,若对应字段值为null,org.json库会直接抛出类型转换异常——因为getJSONObject要求目标值必须是有效的JSONObject,不接受null值。

修复方案

改用optJSONObject()方法替代getJSONObject(),该方法在字段为null或类型不匹配时会返回null,而非抛出异常。同时对null情况设置默认值,避免后续逻辑报错。

修改后的Kotlin代码

val outputJsonString = JSONObject(jsonData)

val establishments = outputJsonString.getJSONObject("FHRSEstablishment")
    .getJSONArray("EstablishmentCollection")

for(i in 0 until establishments.length()) {
    val currentEstablishment = establishments.getJSONObject(i)
    // 处理Geocode null情况
    val geocode = currentEstablishment.optJSONObject("Geocode")
    val longitude = geocode?.optString("Longitude", "") ?: ""
    val latitude = geocode?.optString("Latitude", "") ?: ""

    // 处理Scores null情况
    val scores = currentEstablishment.optJSONObject("Scores")
    val hygiene = scores?.optString("Hygiene", "") ?: ""
    val structural = scores?.optString("Structural", "") ?: ""
    val confidence = scores?.optString("ConfidenceInManagement", "") ?: ""

    list.add(
        Restaurant(
            currentEstablishment.getString("BusinessName"),
            currentEstablishment.getString("BusinessType"),
            currentEstablishment.getString("RatingValue"),
            currentEstablishment.getString("LocalAuthorityName"),
            arrayOf(hygiene, structural, confidence),
            currentEstablishment.getString("LocalAuthorityWebSite"),
            longitude,
            latitude
        )
    )
}

关键修改点说明

  • 替换getJSONObject()为optJSONObject():安全获取可能为null的JSONObject字段,避免直接抛出异常
  • 用optString(key, defaultValue)替代getString():即使子字段为null,也能返回预设的默认空字符串,避免额外异常
  • 提取currentEstablishment变量:减少重复调用establishments.getJSONObject(i),提升代码可读性和执行效率

额外优化建议

如果需要频繁处理JSON解析,建议使用Gson、Moshi等序列化库,通过数据类+注解的方式自动处理null值,代码会更简洁易维护。比如用Gson时,只需定义对应数据类,就能直接将JSON解析为对象列表,无需手动处理每个字段的null情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:27:11