添加依赖 Gradle:

dependencies { implementation 'com.google.code.gson:gson:2.8.6' }



 



 



Gson的实例化有两种方式:

1.简单实例化

Gson gson=newGson();

2.在实例化时进行多种配置(由GsonBuilder 实现):

Gson gson = new GsonBuilder()
                .setLenient()// json宽松
                .enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
                .serializeNulls() //智能null
                .setPrettyPrinting()// 调教格式
                .disableHtmlEscaping() //默认是GSON把HTML 转义的
                .create();

Gson的基本用法:

toJson()实现了序列化,fromJson()实现反序列化。

 toJson():

1.JavaBean转换Json字符串

public class ResultBean implements Serializable {
    private int code;
    private String message;
    private boolean isOK;

    public ResultBean() {
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isOK() {
        return isOK;
    }

    public void setOK(boolean OK) {
        isOK = OK;
    }
}

public class Test {
    public static void main(String[] args) {
        Gson gson = new Gson();
        ResultBean result1 = new ResultBean();
        result1.setCode(007);
        result1.setMessage("詹姆斯邦德");
        result1.setOK(true);
        String string1 = gson.toJson(result1);
        System.out.println(string1);

        ResultBean result2 = new ResultBean();
        result2.setCode(007);
        result2.setMessage(null);
        result2.setOK(true);
        String string2 = gson.toJson(result2);
        System.out.println(string2);

        GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls();
        ResultBean result3 = new ResultBean();
        result3.setCode(007);
        result3.setMessage(null);
        result3.setOK(true);
        String string3 = gsonBuilder.create().toJson(result2);
        System.out.println(string3);
    }
}

运行结果: 

{"code":7,"message":"詹姆斯邦德","isOK":true}
{"code":7,"isOK":true}
{"code":7,"message":null,"isOK":true}

注意:如果ResultBean参数中有变量为null,那么 toJson() 输出的结果则会把为null值的字段忽略,要避免这种结果,可以给Gson设置 serializeNulls();

2.List Map转Json字符串

public class Test {
    public static void main(String[] args) {
        Gson gson = new Gson();
        List<String> list = Arrays.asList("刘大", "王二", "张三", "赵四");
        System.out.println(gson.toJson(list));
        Map<String, Object> content = new HashMap<>();
        content.put("name", "张三");
        content.put("age", "26");
        System.out.println(gson.toJson(content));
    }
}

 运行结果:

["刘大","王二","张三","赵四"]
{"name":"张三","age":"26"}

fromJson():

1.Json字符串转JavaBean

public class Test {
    public static void main(String[] args) {
        String s = "{\n" +
                "\t\"code\": \"007\",\n" +
                "\t\"message\": \"詹姆斯邦德\",\n" +
                "\t\"isOK\": true\n" +
                "}";
        Gson gson = new Gson();
        ResultBean resultBean = gson.fromJson(s, ResultBean.class);
        System.out.println(resultBean);
    }
}

运行结果:

 ResultBean{code=7, message='詹姆斯邦德', isOK=true}

 2. Json字符串转List

public class Test {
    public static void main(String[] args) {
        String s = "[{\n" +
                "\t\"code\": \"007\",\n" +
                "\t\"message\": \"詹姆斯邦德\",\n" +
                "\t\"isOK\": true\n" +
                "}, {\n" +
                "\t\"code\": \"007\",\n" +
                "\t\"message\": \"凌凌漆\",\n" +
                "\t\"isOK\": true\n" +
                "}]";
        Gson gson = new Gson();
        List<ResultBean> resultBeanList = gson.fromJson(s, new TypeToken<List<ResultBean>>() {
        }.getType());
        System.out.println(resultBeanList);
    }
}

运行结果:

[ResultBean{code=7, message='詹姆斯邦德', isOK=true}, ResultBean{code=7, message='凌凌漆', isOK=true}] 

Gson注解

属性重命名 @SerializedName 注解的使用

作用:转换关键字key,json转换成JavaBean时,json字段的key 默认必须和我们声明类的字段名称一样,当服务器端返回了关键字怎么办,比如key 为new switch这样,我们    在声明类的时候不能写这样的字段,可能你想服务器端改动,他可能要改数据库,但是我告诉你,做服务端的大部分不愿意改动他的json,是很自私的!这时候重命名注解都排上用场了   第二种场景:服务器端返回的json 的key 简直太丑,或者太长,你想简化,my_parent_name,可以简化成mpn 比较优雅简介

在属性名上注解 @SerializedName,使POJO中的属性名转为json的键名

SerializedName注解还有一个属性alternate,接收一个String数组
eg: @SerializedName(value = "data", alternate = {"Date", "date"}) 注意:当json中的键名出现data Date date任意一个时均可以得到正确的结果。

参考:

 


添加依赖 Gradle:

dependencies { implementation 'com.google.code.gson:gson:2.8.6' }



 



 



Gson的实例化有两种方式:

1.简单实例化

Gson gson=newGson();

2.在实例化时进行多种配置(由GsonBuilder 实现):

Gson gson = new GsonBuilder()
                .setLenient()// json宽松
                .enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
                .serializeNulls() //智能null
                .setPrettyPrinting()// 调教格式
                .disableHtmlEscaping() //默认是GSON把HTML 转义的
                .create();

Gson的基本用法:

toJson()实现了序列化,fromJson()实现反序列化。

 toJson():

1.JavaBean转换Json字符串

public class ResultBean implements Serializable {
    private int code;
    private String message;
    private boolean isOK;

    public ResultBean() {
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isOK() {
        return isOK;
    }

    public void setOK(boolean OK) {
        isOK = OK;
    }
}

public class Test {
    public static void main(String[] args) {
        Gson gson = new Gson();
        ResultBean result1 = new ResultBean();
        result1.setCode(007);
        result1.setMessage("詹姆斯邦德");
        result1.setOK(true);
        String string1 = gson.toJson(result1);
        System.out.println(string1);

        ResultBean result2 = new ResultBean();
        result2.setCode(007);
        result2.setMessage(null);
        result2.setOK(true);
        String string2 = gson.toJson(result2);
        System.out.println(string2);

        GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls();
        ResultBean result3 = new ResultBean();
        result3.setCode(007);
        result3.setMessage(null);
        result3.setOK(true);
        String string3 = gsonBuilder.create().toJson(result2);
        System.out.println(string3);
    }
}

运行结果: 

{"code":7,"message":"詹姆斯邦德","isOK":true}
{"code":7,"isOK":true}
{"code":7,"message":null,"isOK":true}

注意:如果ResultBean参数中有变量为null,那么 toJson() 输出的结果则会把为null值的字段忽略,要避免这种结果,可以给Gson设置 serializeNulls();

2.List Map转Json字符串

public class Test {
    public static void main(String[] args) {
        Gson gson = new Gson();
        List<String> list = Arrays.asList("刘大", "王二", "张三", "赵四");
        System.out.println(gson.toJson(list));
        Map<String, Object> content = new HashMap<>();
        content.put("name", "张三");
        content.put("age", "26");
        System.out.println(gson.toJson(content));
    }
}

 运行结果:

["刘大","王二","张三","赵四"]
{"name":"张三","age":"26"}

fromJson():

1.Json字符串转JavaBean

public class Test {
    public static void main(String[] args) {
        String s = "{\n" +
                "\t\"code\": \"007\",\n" +
                "\t\"message\": \"詹姆斯邦德\",\n" +
                "\t\"isOK\": true\n" +
                "}";
        Gson gson = new Gson();
        ResultBean resultBean = gson.fromJson(s, ResultBean.class);
        System.out.println(resultBean);
    }
}

运行结果:

 ResultBean{code=7, message='詹姆斯邦德', isOK=true}

 2. Json字符串转List

public class Test {
    public static void main(String[] args) {
        String s = "[{\n" +
                "\t\"code\": \"007\",\n" +
                "\t\"message\": \"詹姆斯邦德\",\n" +
                "\t\"isOK\": true\n" +
                "}, {\n" +
                "\t\"code\": \"007\",\n" +
                "\t\"message\": \"凌凌漆\",\n" +
                "\t\"isOK\": true\n" +
                "}]";
        Gson gson = new Gson();
        List<ResultBean> resultBeanList = gson.fromJson(s, new TypeToken<List<ResultBean>>() {
        }.getType());
        System.out.println(resultBeanList);
    }
}

运行结果:

[ResultBean{code=7, message='詹姆斯邦德', isOK=true}, ResultBean{code=7, message='凌凌漆', isOK=true}] 

Gson注解

属性重命名 @SerializedName 注解的使用

作用:转换关键字key,json转换成JavaBean时,json字段的key 默认必须和我们声明类的字段名称一样,当服务器端返回了关键字怎么办,比如key 为new switch这样,我们    在声明类的时候不能写这样的字段,可能你想服务器端改动,他可能要改数据库,但是我告诉你,做服务端的大部分不愿意改动他的json,是很自私的!这时候重命名注解都排上用场了   第二种场景:服务器端返回的json 的key 简直太丑,或者太长,你想简化,my_parent_name,可以简化成mpn 比较优雅简介

在属性名上注解 @SerializedName,使POJO中的属性名转为json的键名

SerializedName注解还有一个属性alternate,接收一个String数组
eg: @SerializedName(value = "data", alternate = {"Date", "date"}) 注意:当json中的键名出现data Date date任意一个时均可以得到正确的结果。