Gson
GSON 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以快速的将一个 Json 字符转成一个 Java 对象,或者将一个 Java 对象转化为 Json 字符串。
gson 在 github 上开源地址:Gson
Java 解析 Json 最常用的类库有:google 的 Gson、阿里巴巴的 FastJson、以及 Jackson。
image.pngGson 序列化 Java 对象
com.google.gson.Gson提供 toJson() 方法用于序列化Java 对象。
Gson 对象的 toJson 方法可以将 Java 基本数据类型、以及 POJO 对象、List、Map 、JsonElement 等转为 json 格式的字符串,
函数 | 含义 |
---|---|
String toJson(Object src) | 将指定的对象序列化为其等效的Json表示形式,当指定的对象不是泛型类型时,应使用此方法,如果对象是泛型类型,请改用 toJson(object,type). |
String toJson(Object src, Type typeOfSrc) | 将指定的对象(包括泛型类型的对象)序列化为其等效的Json表示形式,对于非泛型对象,请改用{@link#toJson(Object)} |
String toJson(JsonElement jsonElement) | 将 JsonElement 转换为其等效的JSON表示形式。 |
JsonElement toJsonTree(Object src) | 将指定的对象序列化为 JsonElement 的等效表示形式,当指定的对象不是泛型类型时,应使用此方法;如果对象是泛型类型,请改用{@link#toJsonTree(object,type)} |
Gson 反序列化 Java 对象
com.google.gson.Gson 提供 fromJson() 方法用于反序列化 Java 对象.
Gson 对象的 fromJson 方法做与 toJson 相反的操作,将 json 格式的字符串转为基本数据类型、 POJO 对象、List、Map 、JsonElement 等
函数 | 含义 |
---|---|
T fromJson(String json, Class<T> classOfT) | 将指定的 Json 反序列化为指定类的对象,如果指定的类是泛型类型,则使用 fromJson(String, Type)方法。 |
T fromJson(String json, Type typeOfT) | 将指定的 Json 反序列化为指定类型的对象,如果指定的对象是泛型类型,则此方法很有用,对于非泛型对象,请改用 fromJson(String json, Class<T> classOfT) |
T fromJson(JsonElement json, Class<T> classOfT) | 将指定的 json 元素反序列化为指定类型的对象,如果指定的类是泛型类型,则使用 fromJson(JsonElement, Type) 方法。 |
T fromJson(JsonElement json, Type typeOfT) | - |
T fromJson(Reader json, Class<T> classOfT) | 将从指定字符输入流读取的Json反序列化为指定类的对象,如果指定的类是泛型类型,则调用 {@link#fromJson(Reader,type)} |
T fromJson(Reader json, Type typeOfT) | 将从指定字符输入流读取的Json反序列化为指定类的对象,如果指定的类是泛型类型,则调用 {@link#fromJson(Reader,type)} |
实战使用
使用库的方法如下:
项目文件baiapp->build.gradle文件中添加
dependencies {
XXX
XXX
implementation 'com.google.code.gson:gson:2.6.2'
}
然后在build.gradle上点sync刷新下就好了.
序列化使用
MainActivity.java:
package com.exmple.testgson1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.gson.Gson;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toJson2();
}
public void toJson2() {
Person person = new Person();
person.setId(1000);
person.setName("华安");
person.setBirthday(new Date());
person.setMarry(true);
Gson gson = new Gson();
String jsonUser = gson.toJson(person);
Log.d("lee---", "---" + jsonUser);
}
}
Person.java:
package com.exmple.testgson1;
import java.util.Date;
/**
* @author wangMaoXiong
* @version 1.0
* @date 2020/7/13 20:28
*/
public class Person {
private Integer id;
private String name;
private Date birthday;
private Boolean marry;
public Person() {
}
public Person(Integer id, String name, Date birthday, Boolean marry) {
this.id = id;
this.name = name;
this.birthday = birthday;
this.marry = marry;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Boolean isMarry() {
return marry;
}
public void setMarry(Boolean marry) {
this.marry = marry;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", birthday=" + birthday +
", marry=" + marry +
'}';
}
}
执行效果:
2021-01-10 20:16:38.967 11658-11658/com.exmple.testgson1 D/lee---: ---{"birthday":"Jan 10, 2021 20:16:38","id":1000,"marry":true,"name":"华安"}
反序列化使用
MainActivity.java:
package com.exmple.testgson1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.gson.Gson;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fromJson2();
}
public void fromJson2() {
String personJson = "{\"id\":9527,\"name\":\"华安\",\"birthday\":\"Nov 23, 2018 1:50:56 PM\",\"marry\":true}";
Gson gson = new Gson();
Person person = gson.fromJson(personJson, Person.class);
Log.d("lee---", "---" + person);
}
}
Person.java:
package com.exmple.testgson1;
import java.util.Date;
/**
* @author wangMaoXiong
* @version 1.0
* @date 2020/7/13 20:28
*/
public class Person {
private Integer id;
private String name;
private Date birthday;
private Boolean marry;
public Person() {
}
public Person(Integer id, String name, Date birthday, Boolean marry) {
this.id = id;
this.name = name;
this.birthday = birthday;
this.marry = marry;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Boolean isMarry() {
return marry;
}
public void setMarry(Boolean marry) {
this.marry = marry;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", birthday=" + birthday +
", marry=" + marry +
'}';
}
}
执行效果:
2021-01-10 20:21:00.783 13263-13263/com.exmple.testgson1 D/lee---: ---Person{id=9527, name='华安', birthday=Fri Nov 23 01:50:56 GMT+08:00 2018, marry=true}
网友评论