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