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  String.jsonToList(): List {
    val gson = Gson()
    val type: Type = object : TypeToken>() {}.type
    return gson.fromJson(this, type)
}

com.google.gson.internal.LinkedTreeMap cannot be cast to xxx

你可能感兴趣的:(第三方库,json,android)