Gson解析json比较常用的有2种方式:
1.通过JavaBean方式去映射
2.直接转换为JsonObject,解析JsonObject
第一种方式有点缺陷,如果针对json中有数字的话,不能很好的解析出来{"code":"00000","msg":"操作成功","info":{"1":"网络爬取搜房","2":"网络爬取安居客"}},能解析:{"code":"00000","msg":"操作成功","info":{"a":"网络爬取搜房","b":"网络爬取安居客"}},下面将详细介绍一下2种解析方式
一、通过JavaBean方式:
映射类:
response映射类:
public class response {
private String code;
private String msg;
private info info;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public info getInfo() {
return info;
}
public void setInfo(info info) {
this.info = info;
}
}
info映射类:
public class info {
private String a;
private String b;
private String c;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
}
具体的实现代码如下:
<span style="white-space:pre"> </span>@Test
public void test2(){
String json_String ="{\"code\":\"00000\",\"msg\":\"操作成功\",\"info\":{\"a\":\"网络爬取搜房\",\"b\":\"网络爬取安居客\"}}";
System.out.println("json:"+json_String);
Type type = new TypeToken<response>(){}.getType();
Gson gson = new Gson();
response reponse_data=gson.fromJson(json_String, type);
String code=reponse_data.getCode();
String msg=reponse_data.getMsg();
String aa=reponse_data.getInfo().getA();
String bb=reponse_data.getInfo().getB();
System.out.println("code:"+code);
System.out.println("msg:"+msg);
System.out.println("aa:"+aa);
System.out.println("bb:"+bb);
}
程序输出结果:
json:{"code":"00000","msg":"操作成功","info":{"a":"网络爬取搜房","b":"网络爬取安居客"}}
code:00000
msg:操作成功
aa:网络爬取搜房
bb:网络爬取安居客
二、直接转换为JsonObject,解析JsonObject
@Test
public void test(){
String json_String ="{\"code\":\"00000\",\"msg\":\"操作成功\",\"info\":{\"1\":\"网络爬取搜房\",\"2\":\"网络爬取安居客\"}}";
System.out.println("json:"+json_String);
JsonParser parser = new JsonParser();
JsonElement je = parser.parse(json_String);
String code=je.getAsJsonObject().get("code").getAsString();
String msg=je.getAsJsonObject().get("msg").getAsString();
String data1=je.getAsJsonObject().get("info").getAsJsonObject().get("1").getAsString();
String data2=je.getAsJsonObject().get("info").getAsJsonObject().get("2").getAsString();
System.out.println("code:"+code);
System.out.println("msg:"+msg);
System.out.println("data1:"+data1);
System.out.println("data2:"+data2);
}
程序输出结果:
json:{"code":"00000","msg":"操作成功","info":{"1":"网络爬取搜房","2":"网络爬取安居客"}}
code:00000
msg:操作成功
data1:网络爬取搜房
data2:网络爬取安居客
如果json数据中有数组,需要特殊的处理一下,例如:{"code":"00000","msg":"操作成功","data":[{"id":3,"parentId":0,"regionName":"苏州"},{"id":121,"parentId":0,"regionName":"上海"}]}
<span style="white-space:pre"> </span>@Test
public void test3(){
String json_data="{\"code\":\"00000\",\"msg\":\"操作成功\",\"data\":[{\"id\":3,\"parentId\":0,\"regionName\":\"苏州\"},{\"id\":121,\"parentId\":0,\"regionName\":\"上海\"}]}";
System.out.println("json:"+json_data);
Gson gson = new Gson();
JsonParser parser = new JsonParser();
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
JsonObject jsonObject = parser.parse(json_data).getAsJsonObject();
JsonArray jsonArray = jsonObject.getAsJsonArray("data");
Type type = new TypeToken<Map<String,String>>() {}.getType();
for (int i = 0; i < jsonArray.size(); i++) {
JsonElement el = jsonArray.get(i);
Map<String,String> tmp = gson.fromJson(el, type);
list.add(tmp);
System.out.println(tmp.get("regionName"));
}
String code =jsonObject.get("code").getAsString();
System.out.println("code:"+code);
String regionName_1=list.get(0).get("regionName");
String id_1=list.get(0).get("id");
System.out.println("regionName_1:"+regionName_1);
System.out.println("id_1:"+id_1);
// jsonObject.remove("data");
// jsonObject.add("data", parser.parse(gson.toJson(list)).getAsJsonArray());
// System.out.println(gson.toJson(jsonObject));
// System.out.println("code:"+code);
// System.out.println("No:"+No);
}
输出的结果:
苏州
上海
code:00000
regionName_1:苏州
id_1:3