软件测试开发实战| Java版本,Gson解析json比较常用的2种方式

2112 篇文章 51 订阅
1269 篇文章 21 订阅

在这里插入图片描述

软件测试开发基础中,关于json的解析是比较常见的,作为软件测试人员,json的基础需要掌握。这篇文章介绍Gson解析json比较常用的有2种方式,如下。

Gson解析json比较常用的有2种方式:

1.通过JavaBean方式去映射

2.直接转换为JsonObject,解析JsonObject

通过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

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

“入职一年,那个被高薪挖来的自动化软件测试被劝退了。”

4个月自学软件测试面进阿里!如何从功能测试转成自动化…我经历了什么

6000元报了培训班,3个月后我成功“骗”进了腾讯大厂,月薪15000

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值