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

Kotlin无法解析JSON求助:Android新手的JSON解析难题

解决Kotlin/Android中用GSON解析指定JSON的问题

嘿,作为刚接触Kotlin/Android的新手,遇到JSON解析卡壳太正常了!我来一步步帮你搞定这个问题,用GSON来解析你给出的JSON数据。

首先先明确你的JSON结构:这是一个提交记录数组,每个提交包含提交日期和一组用户答案,每个答案对应问题ID和答案值。我们先对应这个结构创建Kotlin数据类,这是GSON解析的关键。

第一步:创建匹配的Kotlin数据类

你需要两个数据类,分别对应提交记录和用户答案:

import com.google.gson.annotations.SerializedName

// 对应每个提交记录
data class Submission(
    @SerializedName("submission_date")
    val submissionDate: String, // 用驼峰命名更符合Kotlin习惯,@SerializedName映射JSON的蛇形键
    @SerializedName("user_answers")
    val userAnswers: List<UserAnswer>
)

// 对应每个用户答案
data class UserAnswer(
    @SerializedName("question_id")
    val questionId: Int,
    val answer: Int
)

如果觉得注解麻烦,也可以直接用和JSON完全一致的变量名(比如submission_date),但驼峰命名是Kotlin的常规风格,更推荐前者。

第二步:添加GSON依赖

确保你的Module级别的build.gradle(或build.gradle.kts)里添加了GSON的依赖:

dependencies {
    // 其他依赖...
    implementation 'com.google.code.gson:gson:2.10.1' // 可以用最新稳定版本
}

同步一下项目,让依赖生效。

第三步:编写解析代码

假设你已经拿到了要解析的JSON字符串(比如从网络请求或本地文件读取),用GSON解析的代码非常简单:

import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

// 示例JSON字符串,就是你给出的那段
val jsonString = """[{ "submission_date": "March 2018", "user_answers": [{ "question_id": 0, "answer": 5 }, { "question_id": 1, "answer": 5 }] }, { "submission_date": "March 2018", "user_answers": [{ "question_id": 0, "answer": 0 }, { "question_id": 1, "answer": 0 }] }]"""

// 方式1:解析成数组,再转成List
val submissionsArray = Gson().fromJson(jsonString, Array<Submission>::class.java)
val submissionsList = submissionsArray.toList()

// 方式2:直接解析成List(需要TypeToken处理泛型)
val listType = object : TypeToken<List<Submission>>() {}.type
val submissionsList2: List<Submission> = Gson().fromJson(jsonString, listType)

// 测试一下解析结果
submissionsList.forEach { submission ->
    println("提交日期:${submission.submissionDate}")
    submission.userAnswers.forEach { answer ->
        println("问题ID:${answer.questionId},答案:${answer.answer}")
    }
}

可能踩的坑提醒

  • 确保数据类的变量类型完全匹配:比如question_id是整数,不能写成String;user_answers是数组,对应Kotlin的List。
  • 如果JSON里有可选字段(可能为null),记得给变量加上?标记可空,比如val submissionDate: String?。
  • 网络请求的JSON要确保不是空字符串,否则解析会抛出异常,可以加个非空判断。

这样应该就能顺利解析你的JSON数据啦,有其他问题随时问!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:33:14