使用Gson解析json格式的字符串

添加依賴 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任意一個時均可以得到正確的結果。

參考:https://blog.csdn.net/axuanqq/article/details/51441590

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章