如何使用GSON解析JSON數(shù)據(jù)
GSON是谷歌提供的一個(gè)開源庫,可以用來解析JSON數(shù)據(jù)
添加依賴
不過GSON并沒有被添加到Android官方的API中,所以如果要使用這個(gè)開源庫,我們就要先添加依賴,編輯app/build.gradle文件,
在dependencies閉包中添加如下內(nèi)容:
implementation 'com.google.code.gson:gson:2.7'
JSON數(shù)據(jù)介紹
JSON數(shù)據(jù)分為兩種,對象和數(shù)組,用{ }括起來的是對象,用[ ]括起來的是數(shù)組。
對象:
{
"user": "user1",
"pwd": "123456"
}此處是一個(gè)JSON對象,里面有兩個(gè)字段,分別是user和pwd。
數(shù)組:
[
{"user": "user1",
"pwd": "123456"},
{"user": "user2",
"pwd": "123456"}
]此處是一個(gè)JSON數(shù)組,數(shù)組里面包含兩個(gè)對象,每個(gè)對象包含兩個(gè)字段。
字段和數(shù)組
{
"user": "user1",
"pwd": "123456",
"jsonArray": [
{"user": "user1",
"pwd": "123456"},
{"user": "user2",
"pwd": "123456"}
],
"result": "成功"
}
此處是一個(gè)JSON對象,里面包含了字段和數(shù)組。
在實(shí)際情況中,一般都是一個(gè)JSON對象里面有數(shù)組和其它字段,或者是很多的嵌套,我們只需要一層一層的去解析就可以了。
GsonFormat
Gson是采用對象映射的方式,所以我們要為JSON數(shù)據(jù)創(chuàng)建一個(gè)Java對象來與之對應(yīng)。
我們可以使用GsonFormat插件,迅速的將JSON數(shù)據(jù)轉(zhuǎn)換成Java對象,使用方法如下:
1、安裝好GsonFormat插件
2、新建一個(gè)類,在類里的空白處按Alt+S鍵,并將要轉(zhuǎn)換的JSON數(shù)據(jù)復(fù)制進(jìn)去,界面如下所示:

注意:自動生成的時(shí)候,內(nèi)部類可能會是靜態(tài)的,手動把內(nèi)部類的static去掉。
@SerializedName注解
由于JSON中的一些字段可能不太適合直接作為Java字段來命名,因此這里使用了@SerializedName注解的方式來讓JSON字段和Java字段之間建立映射關(guān)系。
例:

此處的Test類為JSON數(shù)據(jù)的一個(gè)映射類,而USER和PWD為JSON數(shù)據(jù)中的兩個(gè)字段,很明顯,這兩個(gè)字段的名字不適合做變量名,所以使用@SerializedName注解的方式來讓USER和user建立映射關(guān)系,PWD和password建立映射關(guān)系。
Gson的使用
解析JSON對象
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來存放這個(gè)數(shù)組,List中的每一個(gè)對象就是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è)對象
String result = data.getResult(); // 取result字段的值
String pwd = data.getPwd(); // 取pwd字段的值
String user = data.getUser(); // 取user字段的值
// 因?yàn)閖sonArray字段對應(yīng)的是一個(gè)JSON數(shù)組,所以要用一個(gè)List來對應(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();
}
}
此處沒有給出網(wǎng)絡(luò)通信的代碼,只給出了解析JSON數(shù)據(jù)的代碼。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于直方圖應(yīng)用的相似圖片識別實(shí)例
這篇文章主要介紹了Java基于直方圖應(yīng)用的相似圖片識別實(shí)例,是非常實(shí)用的技巧,多見于圖形里游戲中,需要的朋友可以參考下2014-09-09
springboot打包部署到linux服務(wù)器的方法
這篇文章主要介紹了springboot打包部署到linux服務(wù)器的方法,通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
詳解Java中LinkedStack鏈棧的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java中LinkedStack鏈棧的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下2022-11-11
Java語言實(shí)現(xiàn)簡單FTP軟件 FTP軟件主界面(4)
這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡單FTP軟件,F(xiàn)TP軟件主界面編寫的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回
這篇文章主要介紹了Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07
java多線程之Future和FutureTask使用實(shí)例
這篇文章主要介紹了java多線程之Future和FutureTask使用實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09

