Gson解析josn数据的2种方法

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值