前言
使用Google提供的Gson,将JSON格式的字符串转换为Java实体类对象
项目主页
引入依赖
build.gradle
1 2 3 4 5 6
| dependencies {
... implementation 'com.google.code.gson:gson:2.8.6' }
|
创建实体类
1 2 3 4 5
| public class Responce {
...
}
|
创建Gson对象
Java对象序列化/反序列化
将Java对象转化成JSON格式字符串
<obj>
:Java实体类对象
1
| String json = gson.toJson(<obj>);
|
将Json格式字符串转化成Java对象
json
:json格式的字符串
Object.class
:实体类
1
| Object obj = gson.fromJson(json, Object.class);
|
Java数组序列化/反序列化
将Java数组转化成JSON格式字符串
<arr>
:Java数组
1
| String json = gson.toJson(<arr>);
|
将Json格式字符串转化成Java对象
json
:json格式的字符串
Object[].class
:Java数组类型
1
| Object obj = gson.fromJson(json, Object[].class);
|
Java List集合序列化/反序列化
将Java集合转化成JSON格式字符串
<list>
:Java集合
1
| String json = gson.toJson(<list>);
|
将Json格式字符串转化成Java集合
json
:json格式的字符串
type
:使用Gson提供的Type类定义泛型
1 2
| Type type = new TypeToken<List<Object>>() {}.getType(); List<Object> list = gson.fromJson(json, type);
|
Java Map集合序列化/反序列化
将Java集合转化成JSON格式字符串
<map>
:Java集合
1
| String json = gson.toJson(<map>);
|
将Json格式字符串转化成Java集合
json
:json格式的字符串
type
:使用Gson提供的Type类定义泛型
1 2
| Type type = new TypeToken<Map<String, Object>>() {}.getType(); Map<String, Object> map = gson.fromJson(json, type);
|
Java Map集合序列化/反序列化
将Java集合转化成JSON格式字符串
<set>
:Java集合
1
| String json = gson.toJson(<set>);
|
将Json格式字符串转化成Java集合
json
:json格式的字符串
type
:使用Gson提供的Type类定义泛型
1 2
| Type type = new TypeToken<Set<Object>>() {}.getType(); Set<Object> set = gson.fromJson(json, type);
|
- 如果想要得到的是HashSet类型,则完全可以直接得到List类型,因为两者序列化后的JSON格式字符串完全相同
1 2
| Type type = new TypeToken<List<Object>>() {}.getType(); List<Object> set = gson.fromJson(json, type);
|
控制字段的命名
- 当JSON的key中出现Java保留字时,可以使用
@SerializedName("")
注解指定key
public
:key
1 2
| @SerializedName("public") String p;
|
控制字段是否参与序列化
- 可以使用
@Expose
注解控制字段是否参与序列化与反序列化
serialize = true
:是否参与序列化
deserialize = true
:是否参与反序列化
1
| @Expose(serialize = true, deserialize = true)
|
- 为了使
@Expose
注解生效,创建Gson对象时需要使用GsonBuilder()创建
1
| Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
|
参与序列化与反序列化
- 指定无参的
@Expose
注解,等同于不指定@Expose
注解,表示参与序列化与反序列化
不参与序列化与反序列化
- 使用transient关键字定义的字段,等同于
@Expose(serialize = false, deserialize = false)
,表示不参与序列化与反序列化
完成
参考文献
哔哩哔哩——Android架构解析