欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用GSON解析JSON數(shù)據(jù)

 更新時(shí)間:2022年08月30日 10:40:42   作者:冰之沁泠  
這篇文章主要介紹了如何使用GSON解析JSON數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

GSON是谷歌提供的一個(gè)開源庫(kù),可以用來(lái)解析JSON數(shù)據(jù)

添加依賴

不過(guò)GSON并沒(méi)有被添加到Android官方的API中,所以如果要使用這個(gè)開源庫(kù),我們就要先添加依賴,編輯app/build.gradle文件,

在dependencies閉包中添加如下內(nèi)容:

implementation 'com.google.code.gson:gson:2.7'

JSON數(shù)據(jù)介紹

JSON數(shù)據(jù)分為兩種,對(duì)象和數(shù)組,用{ }括起來(lái)的是對(duì)象,用[ ]括起來(lái)的是數(shù)組。

對(duì)象:

	{
            "user": "user1",
            "pwd": "123456"
	}

此處是一個(gè)JSON對(duì)象,里面有兩個(gè)字段,分別是user和pwd。

數(shù)組:

[
	{"user": "user1",
	  "pwd": "123456"},
	  
	  {"user": "user2",
	  "pwd": "123456"}
]

此處是一個(gè)JSON數(shù)組,數(shù)組里面包含兩個(gè)對(duì)象,每個(gè)對(duì)象包含兩個(gè)字段。

字段和數(shù)組

{
        "user": "user1",
        "pwd": "123456",
            
        "jsonArray": [
			 {"user": "user1",
	 	      "pwd": "123456"},
	  
	 	     {"user": "user2",
	 		 "pwd": "123456"}
						],
						
			"result": "成功"			
}

此處是一個(gè)JSON對(duì)象,里面包含了字段和數(shù)組。

在實(shí)際情況中,一般都是一個(gè)JSON對(duì)象里面有數(shù)組和其它字段,或者是很多的嵌套,我們只需要一層一層的去解析就可以了。

GsonFormat

Gson是采用對(duì)象映射的方式,所以我們要為JSON數(shù)據(jù)創(chuàng)建一個(gè)Java對(duì)象來(lái)與之對(duì)應(yīng)。

我們可以使用GsonFormat插件,迅速的將JSON數(shù)據(jù)轉(zhuǎn)換成Java對(duì)象,使用方法如下:

1、安裝好GsonFormat插件

2、新建一個(gè)類,在類里的空白處按Alt+S鍵,并將要轉(zhuǎn)換的JSON數(shù)據(jù)復(fù)制進(jìn)去,界面如下所示:

注意:自動(dòng)生成的時(shí)候,內(nèi)部類可能會(huì)是靜態(tài)的,手動(dòng)把內(nèi)部類的static去掉。

@SerializedName注解

由于JSON中的一些字段可能不太適合直接作為Java字段來(lái)命名,因此這里使用了@SerializedName注解的方式來(lái)讓JSON字段和Java字段之間建立映射關(guān)系。

例:

此處的Test類為JSON數(shù)據(jù)的一個(gè)映射類,而USER和PWD為JSON數(shù)據(jù)中的兩個(gè)字段,很明顯,這兩個(gè)字段的名字不適合做變量名,所以使用@SerializedName注解的方式來(lái)讓USER和user建立映射關(guān)系,PWD和password建立映射關(guān)系。

Gson的使用

解析JSON對(duì)象

Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);

此處的User類是JSON數(shù)據(jù)的一個(gè)映射類,jsonData是JSON數(shù)據(jù),注意:此處是一個(gè)字符串,所有的JSON數(shù)據(jù)都放在這個(gè)字符串中,一般為服務(wù)器返回的數(shù)據(jù)。

解析JSON數(shù)組

 Gson gson = new Gson();
 List<User> userList = gson.fromJson(jsonData, new TypeToken<User>(){}.getType());

因?yàn)槭墙馕鯦SON數(shù)組,所以我們要用一個(gè)List來(lái)存放這個(gè)數(shù)組,List中的每一個(gè)對(duì)象就是JSON數(shù)組中的每一個(gè)元素。

具體實(shí)例

要解析的JSON數(shù)據(jù):

{
        "user": "user1",
        "pwd": "123456",
            
        "jsonArray": [
			 {"user": "user1",
	 	      "pwd": "123456"},
	  
	 	     {"user": "user2",
	 		 "pwd": "123456"}
						],
						
			"result": "成功"			
}

映射的Java類:

public class Data {
    
    private String user;
    private String pwd;
    private String result;
    private List<JsonArrayBean> jsonArray;
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public List<JsonArrayBean> getJsonArray() {
        return jsonArray;
    }
    public void setJsonArray(List<JsonArrayBean> jsonArray) {
        this.jsonArray = jsonArray;
    }
    public class JsonArrayBean {
        
        private String user;
        private String pwd;
        public String getUser() {
            return user;
        }
        public void setUser(String user) {
            this.user = user;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    }
}

解析的方法:

private void parseJSONData(String jsonData) {
        Gson gson = new Gson();
        Data data = gson.fromJson(jsonData, Data.class);
        // data就是整個(gè)JSON數(shù)據(jù)映射的一個(gè)對(duì)象
        String result = data.getResult(); // 取result字段的值
        String pwd = data.getPwd();   // 取pwd字段的值
        String user = data.getUser();  // 取user字段的值
        // 因?yàn)閖sonArray字段對(duì)應(yīng)的是一個(gè)JSON數(shù)組,所以要用一個(gè)List來(lái)對(duì)應(yīng)
        List<Data.JsonArrayBean> list = data.getJsonArray();
        //取值
        for (int i = 0; i < list.size(); i++) {
            Data.JsonArrayBean jsonArrayBean = list.get(i);
            String user1 = jsonArrayBean.getUser();
            String pwd1 = jsonArrayBean.getPwd();
        }
    }

此處沒(méi)有給出網(wǎng)絡(luò)通信的代碼,只給出了解析JSON數(shù)據(jù)的代碼。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 實(shí)戰(zhàn)項(xiàng)目之精品養(yǎng)老院管理系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目之精品養(yǎng)老院管理系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+Maven+mybatis+Vue+Mysql實(shí)現(xiàn)一個(gè)精品養(yǎng)老院管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Java中BigDecimal類的使用詳解

    Java中BigDecimal類的使用詳解

    這篇文章主要介紹了Java中BigDecimal類的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java調(diào)用echarts提供的地圖壓縮方法來(lái)壓縮地圖

    Java調(diào)用echarts提供的地圖壓縮方法來(lái)壓縮地圖

    今天小編就為大家分享一篇關(guān)于Java調(diào)用echarts提供的地圖壓縮方法來(lái)壓縮地圖,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Java 自定義注解的魅力

    Java 自定義注解的魅力

    這篇文章主要介紹了Java 自定義注解的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Spring和MyBatis整合自動(dòng)生成代碼里面text類型遇到的坑

    Spring和MyBatis整合自動(dòng)生成代碼里面text類型遇到的坑

    Spring和MyBatis整合以后,使用自動(dòng)生成代碼工具生成dao和mapper配置文件。下面通過(guò)本文給大家介紹Spring和MyBatis整合自動(dòng)生成代碼里面text類型遇到的坑,需要的朋友參考下吧
    2018-01-01
  • java使用Filter實(shí)現(xiàn)自動(dòng)登錄的方法

    java使用Filter實(shí)現(xiàn)自動(dòng)登錄的方法

    這篇文章主要為大家詳細(xì)介紹了java使用Filter實(shí)現(xiàn)自動(dòng)登錄的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 基于SpringBoot創(chuàng)建Web頁(yè)面并熱更新的操作步驟

    基于SpringBoot創(chuàng)建Web頁(yè)面并熱更新的操作步驟

    SpringBoot是一個(gè)用于快速開發(fā)單個(gè)微服務(wù)的框架,它基于 Spring 框架,簡(jiǎn)化了Spring應(yīng)用的初始化過(guò)程和開發(fā)流程,本文給大家介紹了如何基于SpringBoot創(chuàng)建Web頁(yè)面并熱更新,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • websocket在springboot+vue中的使用教程

    websocket在springboot+vue中的使用教程

    這篇文章主要介紹了websocket在springboot+vue中的使用教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java截取中英文混合字符串的方法

    Java截取中英文混合字符串的方法

    這篇文章主要為大家詳細(xì)介紹了Java截取中英文混合字符串的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    這篇文章主要介紹了關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論