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
相关产品推荐
相关产品推荐

