csdnxpw 2018-12-24
Gson的解析Json数据的两种方式
2018年01月05日20:34:00胡大炮的妖孽人生阅读数:18819标签:gsonjsonjava更多
个人分类:java
版权声明:本博客所有文章除特别声明外,均采用CCBY-NC-SA4.0许可协议。转载请注明出处!https://blog.csdn.net/huplion/article/details/78984977
0x00前言
目前网络上有很多接口是Json形式的,Gson是谷歌开源的Json解析库,可以方便的将Java对象转换成Json字符串,也可以方便的将Json字符串转换成Java对象。
0x01两种解析Json字符串方式
假设我们要解析的字符串是如下字符串:
{
"rst":0,
"msg":"ok",
"data":{
"cookie":"JSESSIONID=abcntKeuJhop56LGykfdw"
}
}
1
2
3
4
5
6
7
方式一(建立一个映射类):
针对如上的数据:
https://www.bejson.com/json2javapojo/new/
我们可以手动建立如下的类或者访问以上的链接建立如下Java实体类:
JsonRootBean.java
publicclassJsonRootBean{
privateintrst;
privateStringmsg;
privateDatadata;
publicvoidsetRst(intrst){
this.rst=rst;
}
publicintgetRst(){
returnrst;
}
publicvoidsetMsg(Stringmsg){
this.msg=msg;
}
publicStringgetMsg(){
returnmsg;
}
publicvoidsetData(Datadata){
this.data=data;
}
publicDatagetData(){
returndata;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Data.java
publicclassData{
privateStringcookie;
publicvoidsetCookie(Stringcookie){
this.cookie=cookie;
}
publicStringgetCookie(){
returncookie;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
主类:Main.java
Stringjson="{\n"+
"\"rst\":0,\n"+
"\"msg\":\"ok\",\n"+
"\"data\":{\n"+
"\"cookie\":\"JSESSIONID=abcntKeuJhop56LGykfdw\"\n"+
"}\n"+
"}";
JsonRootBeanjsonRootBean=newGson().fromJson(json,JsonRootBean.class);
System.out.println("rst:"+jsonRootBean.getRst());
System.out.println("msg:"+jsonRootBean.getMsg());
System.out.println("data:"+jsonRootBean.getData().getCookie());
1
2
3
4
5
6
7
8
9
10
11
结果
rst:0
msg:ok
data:JSESSIONID=abcntKeuJhop56LGykfdw
方式二(直接访问):
主类:Main.java
importcom.google.gson.JsonObject;
importcom.google.gson.JsonParser;
publicclassMain{
publicstaticvoidmain(String[]args){
Stringjson="{\n"+
"\"rst\":0,\n"+
"\"msg\":\"ok\",\n"+
"\"data\":{\n"+
"\"cookie\":\"JSESSIONID=abcntKeuJhop56LGykfdw\"\n"+
"}\n"+
"}";
JsonObjectjsonObject=(JsonObject)newJsonParser().parse(json);
System.out.println("rst:"+jsonObject.get("rst").getAsInt());
System.out.println("msg:"+jsonObject.get("msg").getAsString());
System.out.println("data:"+jsonObject.get("data").getAsJsonObject().get("cookie").getAsString());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
结果
rst:0
msg:ok
data:JSESSIONID=abcntKeuJhop56LGykfdw
0x02结论
两种方式各有优劣,在需要用的属性少的时候适合第二种方式,否则适合第一种方式。
.create();String param = "xxxxxxx";Map<String, Map<String, List<MpAppInfo>>> inParams = gson.fromJso