Android之Google Gson介绍

Gson

GSON 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以快速的将一个 Json 字符转成一个 Java 对象,或者将一个 Java 对象转化为 Json 字符串。

gson 在 github 上开源地址:Gson

Java 解析 Json 最常用的类库有:google 的 Gson、阿里巴巴的 FastJson、以及 Jackson。

Gson 序列化 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}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章