Gson 使用总结

Gson

json 解析库

添加依赖
  implementation 'com.google.code.gson:gson:2.10'

1.基础使用

1.1 解析普通对象

对象

data class Entity(var name: String)

解析方法

Gson().newBuilder().create().fromJson(jsonStr, Entity::class.java)
1.2 解析数组

解析方法

val gson = Gson()
val type: Type = object : TypeToken<ArrayList<Entity>>() {}.type
val list: List<Entity> = gson.fromJson(jsonStr, type)

2.注意事项

2.1 特殊符号

https://lh3.googleusercontent.com/a/AATXAJw3mg8MpSYGBQgENwP90OhX4IXR7HetVl9ZuBPT=s96-c
注意转json的时候特殊符号会变成unicode编码\u003d1

GsonBuilder gb =new GsonBuilder();
gb.disableHtmlEscaping();
gb.create().toJson("http://www.baidu.com/id=1");
3.封装工具类
import com.google.gson.Gson
import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import java.lang.reflect.Type

fun <T> String.jsonToObject(clazz: Class<T>): T {
    return Gson().newBuilder().create().fromJson(this, clazz)
}

fun <T> String.jsonToList(clazz: Class<T>): MutableList<T> {
    val gson = Gson()
    val jsonArray = JsonParser.parseString(this).asJsonArray
    val list = mutableListOf<T>()
    for (element in jsonArray) {
        list.add(gson.fromJson(element, clazz))
    }
    return list
}
4.遇到的问题

范型和list解析报错,换成了上面的 JsonParser 解析

fun <T> String.jsonToList(): List<T> {
    val gson = Gson()
    val type: Type = object : TypeToken<List<T>>() {}.type
    return gson.fromJson(this, type)
}

com.google.gson.internal.LinkedTreeMap cannot be cast to xxx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值