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

使用Kotlin解析嵌套JSON数组/对象时如何获取class_name值

原生Kotlin解析嵌套JSON获取class_name实现方案

核心逻辑

你要获取的class_name字段位于三层结构下:

  1. 根节点的childScoresList数组(你已经遍历到这层)
  2. 该数组每个元素下嵌套的classes数组
  3. classes数组的每个对象里就存着class_name字段

只需要在你现有遍历逻辑的基础上,逐层向下取出嵌套数组、继续遍历即可,不需要依赖任何第三方库。

待解析JSON结构

{
  "childScoresList": [
    {
      "child_id": "1",
      "score_date": "2022-03-27",
      "category_id": "1",
      "category_name": "Preschool Math",
      "classes": [
        {
          "category_name": "Preschool Math",
          "class_name": "Number Blocks",
          "class_id": "1",
          "class_description": "Ones, Tens, Hundreds Blocks used to create given numbers.",
          "skills": [
            {
              "skill_id": "1",
              "skill_name": "Place Value",
              "skill_description": "Knowing the place value of specific elements.",
              "skill_score": "50"
            }
          ]
        }
      ]
    }
  ]
}

完整实现代码

val rootObj = JSONObject(response.toString())
val childScoresArray = rootObj.getJSONArray("childScoresList")

for (i in 0 until childScoresArray.length()) {
    val scoreItem = childScoresArray.getJSONObject(i)
    // 原有逻辑:获取一级节点的category_name
    val categoryName = scoreItem.getString("category_name")

    // 取出当前节点下嵌套的classes数组
    val classesArray = scoreItem.getJSONArray("classes")
    for (j in 0 until classesArray.length()) {
        val classItem = classesArray.getJSONObject(j)
        // 成功获取嵌套的class_name字段
        val className = classItem.getString("class_name")

        // 如果需要取更下层的skills字段,按相同逻辑继续向下遍历即可
        val skillsArray = classItem.getJSONArray("skills")
        for (k in 0 until skillsArray.length()) {
            val skillItem = skillsArray.getJSONObject(k)
            val skillScore = skillItem.getString("skill_score")
        }
    }
}

注意事项

  • 解析时严格按照JSON的层级逐层取值,不要跨层级直接取深层字段,否则会抛出字段不存在的异常
  • 如果实际业务中JSON结构可能存在字段缺失的情况,建议将getString/getJSONArray替换为optString/optJSONArray系列方法,支持设置默认值,字段不存在时不会直接崩溃:
    // 字段不存在时返回空字符串,不会崩溃
    val className = classItem.optString("class_name", "")
    // 字段不存在时返回null,遍历前先判空即可
    val classesArray = scoreItem.optJSONArray("classes")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:18:28