Android使用Kotlin利用Gson解析多层嵌套Json数据

文章目录

1、依赖

build.gradle(app)中加入

java 复制代码
dependencies {
implementation 'com.google.code.gson:gson:2.8.9'
}

2、解析

  1. 假设这是要解析Json数据
java 复制代码
var responseStr =
"{
	"code": 200,
	"message": "操作成功",
	"data": {
		"pageNum": 1,
		"pageSize": 5,
		"totalPage": 2,
		"total": 8,
		"list": [{
			"id": 1,
			"username": "test",
			"password": "123",
			"icon": "https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_02.png",
			"email": "test@qq.com",
			"nickName": "测试账号",
			"note": null,
			"createTime": "2018-09-29T05:55:30.000+00:00",
			"loginTime": "2018-09-29T05:55:39.000+00:00",
			"status": 1
		}, {
			"id": 3,
			"username": "admin",
			"password": "123",
			"icon": "https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_01.png",
			"email": "admin@163.com",
			"nickName": "系统管理员",
			"note": "系统管理员",
			"createTime": "2018-10-08T05:32:47.000+00:00",
			"loginTime": "2019-04-20T04:45:16.000+00:00",
			"status": 1
		}, {
			"id": 4,
			"username": "macro",
			"password": "123",
			"icon": "https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_01.png",
			"email": "macro@qq.com",
			"nickName": "macro",
			"note": "macro专用",
			"createTime": "2019-10-06T07:53:51.000+00:00",
			"loginTime": "2020-02-03T06:55:55.000+00:00",
			"status": 1
		}, {
			"id": 6,
			"username": "productAdmin",
			"password": "123",
			"icon": "https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_03.png",
			"email": "product@qq.com",
			"nickName": "商品管理员",
			"note": "只有商品权限",
			"createTime": "2020-02-07T08:15:08.000+00:00",
			"loginTime": null,
			"status": 1
		}, {
			"id": 7,
			"username": "orderAdmin",
			"password": "123",
			"icon": "https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_04.png",
			"email": "order@qq.com",
			"nickName": "订单管理员",
			"note": "只有订单管理权限",
			"createTime": "2020-02-07T08:15:50.000+00:00",
			"loginTime": null,
			"status": 1
		}]
	}
}     
  1. 分析Json的结构
  • Json主要构成部分

    对应的类
kotlin 复制代码
data class Result(
    val code: Int,
    val message: String,
    val data: Data
) : Serializable
  • data部分的组成

    对应的类:
kotlin 复制代码
data class Data(
    val pageNum: Int,
    val pageSize: Int,
    val totalPage: Int,
    val total: Int,
    val list: List<list> = ArrayList(),
) : Serializable

Json中list使用[ ],所以这里的list写成: val list: List<list> = ArrayList()

  • list部分的组成

    对应的类:
kotlin 复制代码
data class list(
    val id: Int,
    val username: String,
    val password: String,
    val icon: String,
    val email: String,
    val nickName: String,
    val createTime: String,
    val loginTime: String,
    val status: Int
) : Serializable

重点提醒:类里面的属性名必须跟Json字段里面的Key是一模一样的,否则会导致解析不成功

如果不一致:

这个部分我刚开始处理也错了,找了好久才发现,一定要注意

  1. 开始解析
kotlin 复制代码
		val gson = Gson()
        val resultType = object :  TypeToken<Result>() {}.type
        val fromJson = gson.fromJson<Result>(responseStr, resultType)
  1. 提取数据
    通过fromJson提取
    如:
相关推荐
非专业程序员Ping5 小时前
HarfBuzz概览
android·ios·swift·font
Jeled5 小时前
「高级 Android 架构师成长路线」的第 1 阶段 —— 强化体系与架构思维(Clean Architecture 实战)
android·kotlin·android studio·1024程序员节
明道源码7 小时前
Kotlin 控制流、函数、Lambda、高阶函数
android·开发语言·kotlin
橙子199110167 小时前
在 Kotlin 中,ViewModel 的获取
开发语言·vue.js·kotlin
hweiyu007 小时前
Gradle 构建脚本迁移:从 Groovy DSL 到 Kotlin DSL,语法与技巧对比
开发语言·kotlin·gradle
消失的旧时光-19437 小时前
搞懂 Kotlin 的 List、Set、Map、HashMap、LinkedHashMap,以及 asSequence() 的底层原理与实战场景。
kotlin·数据处理·1024程序员节
明道源码7 小时前
Kotlin 面向对象编程、主构造函数、次构造函数、伴生对象、数据类、继承
kotlin·1024程序员节
消失的旧时光-19439 小时前
Kotlin × Gson:为什么遍历 JsonObject 要用 entrySet()
android·kotlin·数据处理·1024程序员节
G果11 小时前
安卓APP页面之间传参(Android studio 开发)
android·java·android studio
曾凡宇先生12 小时前
无法远程连接 MySQL
android·开发语言·数据库·sql·tcp/ip·mysql·adb