解析第三方接口中json数据

之前在三方接口对接时,发现直接获取json内容很容易空指针,于是重新整理了一下获取JSONObject,JSONArray 的方法。

containsKey来判断是否有此对象或者数组
dataJson.containsKey(“list”)

JSONObject dataJson = resultJson.getJSONObject("data");  //获取对象或集合
Integer total = dataJson.getInteger("total");   //获取数值
JSONArray listJsonArray = dataJson.getJSONArray("list");  //获取数组
JSONObject json2 = (JSONObject) JSONObject.toJSON(obj2);  //循环jsonArray时,先用Object 接,之后将object对象转为json对象

1.观察json数据:
第一层:
1.1code和message 返回stringl类型
1.2.data {}返回集合

第二层:(解析data)
2.1total和pageNo和 pageSize为数字
2.2list[]为数组

第三层:
designatedResources []为数组且里面每个对象包含不同数量的属性 paramKey或paramValues或paramKey+paramValues

        String result = "{\n" +
                "    \"code\":\"0\",\n" +
                "    \"msg\":\"success\",\n" +
                "    \"data\":{\n" +
                "        \"total\":1,\n" +
                "        \"pageNo\":1,\n" +
                "        \"pageSize\":20,\n" +
                "        \"list\":[\n" +
                "            {\n" +
                "                \"visitorName\":\"张三\",\n" +
                "                \"gender\":1,\n" +
                "                \"certificateType\":111,\n" +
                "                \"certificateNo\":\"311256196602145692\",\n" +
                "                \"phoneNo\":\"13576361254\",\n" +
                "                \"plateNo\":\"浙A12345\",\n" +
                "                \"picUri\":\"/pic?adsdqwe21-asafdd-12sfsdfsdf\",\n" +
                "                \"svrIndexCode\":\"sadsa123-asd21edsfhgsd-23rfdvsr\",\n" +
                "                \"visitorStatus\":8,\n" +
                "                \"verificationCode\":\"1234\",\n" +
                "                \"visiorGroupId\":\"sadsa-1sfsdfsdfsdff\",\n" +
                "                \"visiorGroupName\":\"分组\",\n" +
                "                \"receptionistId\":\"3124126241412\",\n" +
                "                \"receptionistName\":\"王五\",\n" +
                "                \"receptionistCode\":\"2423O4U2O3\",\n" +
                "                \"visitPurpose\":\"参观\",\n" +
                "                \"visitStartTime\":\"2018-07-26T15:00:00+08:00\",\n" +
                "                \"visitEndTime\":\"2018-07-26T19:00:00+08:00\",\n" +
                "                \"QRCode\":\"2015468421\",\n" +
                "                \"certAddr\":\"江苏南京\",\n" +
                "                \"certIssuer\":\"派出所\",\n" +
                "                \"nation\":1,\n" +
                "                \"birthplace\":\"江苏南京\",\n" +
                "                \"visitorWorkUnit\":\"海康威视\",\n" +
                "                \"orderId\":\"c1ou5th1p8chiicrcqcre\",\n" +
                "                \"visitorAddress\":\"湖南路\",\n" +
                "                \"personNum\":1,\n" +
                "                \"plannedStartTime\":\"2018-07-26T15:00:00+08:00\",\n" +
                "                \"plannedEndTime\":\"2018-08-26T15:00:00+08:00\",\n" +
                "                \"designatedResources\":[\n" +
                "                    {\n" +
                "                        \"paramKey\":\"1\",\n" +
                "                        \"paramValues\":[\n" +
                "                            \"17c09845y1c05c79059c\"\n" +
                "                        ]\n" +
                "                    },\n" +
                "                    {\n" +
                "                        \"paramKey\":\"2\"\n" +
                "                    },\n" +
                "                    {\n" +
                "                        \"paramValues\":[\n" +
                "                            \"222\",\n" +
                "                            \"333\"\n" +
                "                        ]\n" +
                "                    }\n" +
                "                ],\n" +
                "                \"cardNo\":\"2143v10u396uv099\",\n" +
                "                \"privilegeGroupNames\":[\n" +
                "                    \"111111111\"\n" +
                "                ]\n" +
                "            }\n" +
                "        ]\n" +
                "    }\n" +
                "}";

下面为获取数据过程

        List<String> aa=new ArrayList();
        List<String> bb=new ArrayList();
        if(result!=null&&result!="") {
            JSONObject resultJson = (JSONObject) JSONObject.parse(result);  //先把String 对象转成JSONObject对象
            String code = resultJson.getString("code");
            if ("0".equals(code)) {
                JSONObject dataJson = resultJson.getJSONObject("data");
                Integer total = dataJson.getInteger("total");
                Integer pageNo = dataJson.getInteger("pageNo");
                Integer pageSize = dataJson.getInteger("pageSize");
                if(dataJson.containsKey("list")){
                    JSONArray listJsonArray = dataJson.getJSONArray("list");
                    for(Object obj:listJsonArray){
                        JSONObject json = (JSONObject) JSONObject.toJSON(obj);
                            if(json.containsKey("designatedResources")){
                                JSONArray designatedResourcesJsonArray = json.getJSONArray("designatedResources");
                            for(Object obj2:designatedResourcesJsonArray){
                                JSONObject json2 = (JSONObject) JSONObject.toJSON(obj2);
                                if(json2.containsKey("paramKey")){
                                    aa.add(json2.getString("paramKey"));
                                }
                                if(json2.containsKey("paramValues")){
                                    JSONArray values=json2.getJSONArray("paramValues");
                                    System.out.println("values"+values);
                                    for(Object obj3:values){
                                      String b=  obj3.toString();
                                      bb.add(b);
                                        System.out.println("b"+b);
                                    }

                                }
                            }
                        }
            }

                }


            }
        }
        System.out.println("aa"+aa);
        System.out.println("bb"+bb);

输出结果:
在这里插入图片描述

总结过程:
1.第一层
JSONObject resultJson = (JSONObject) JSONObject.parse(result); //先把String 对象转成JSONObject对象

2.第二层
JSONObject dataJson = resultJson.getJSONObject(“data”);//获取集合对象

3.第三层
JSONArray listJsonArray = dataJson.getJSONArray(“list”);//获取数组对象

4.循环上一层数组,得到一个json对象,再判断此json对象中是否含有某数组

for(Object obj:listJsonArray){
                    JSONObject json = (JSONObject) JSONObject.toJSON(obj);
                     if(json.containsKey("designatedResources")){
                     JSONArray designatedResourcesJsonArray = json.getJSONArray("designatedResources");
                     }

5.循环designatedResourcesJsonArray 数组,得到json对象,判断此对象中是否有某对象或某数组

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值