做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题

这个是后台对登录用户以及筛选条件的操作

 1 @Override
 2     public List<SdSdPer> listResults(String sidx, String sord) {
 3         try {
 4             List<SdSdPer> results = Collections.emptyList();  
 5             rlist = new ArrayList<SdSdPer>(results);
 6             String setC = setCdtInit(sidx, sord);//setC------>{"chenbanrenid":"****" }json对象
 7             String rstr = oaboSvc.getSdrs(setC);//rstr------>[{"oid":"----":"史红波"}]  所有送达人员的信息json数组
 8             System.out.println("rstr------->"+rstr);
 9             if (bauser.getUserName().equals("admin")) {
10                 if(!StringUtil.isEmpty(rstr) && !rstr.equals("[]")){
11                     rlist = GsonUtil.getObjects(rstr, new TypeToken<ArrayList<SdSdPer>>() {}.getType()) ;
12                 }
13             } else {
14                 //筛选结果json数组
15                 String rstr1=null ;
16                 String sdrstr=null;
17                 JSONArray jsonarr=JSONArray.fromObject(rstr1);
18                 //json对象  
19                 JSONObject  jo1 = JSONObject.fromObject(setC);
20                 //获取相应key的值   (登录用户的id值作为承办id)
21                 String chenbanrenid1 = jo1.getString("chenbanrenid");
22                 //json数组
23                 JSONArray jo2=JSONArray.fromObject(rstr);
24                 for (int i = 0; i < jo2.size(); i++) {
25                     //遍历json数组  取出一个json对象
26                     JSONObject  jsonobj = jo2.getJSONObject(i);
27                     System.out.println("===================="+jsonobj);
28                     String chenbanrenid2=jsonobj.getString("chenbanId");
29                     //判断两者id是否一致   一致的话将遍历出来的json对象放进 筛选结果json数组
30                     System.out.println("chenbanrenid1==chenbanrenid2:"+chenbanrenid1.equals(chenbanrenid2));
31                     if(chenbanrenid1!=null && chenbanrenid2!=null &&chenbanrenid1.equals(chenbanrenid2)){
32                         //把这条数据添加到json数组中
33                         jsonarr.add(jsonobj);
34                     }
35                 }
36                 jsonarr.remove(0);
37                 sdrstr=jsonarr.toString();
38                 System.out.println("sdrstr----->"+sdrstr);
39                 if(!StringUtil.isEmpty(sdrstr) && !sdrstr.equals("[]")){
40                     rlist = GsonUtil.getObjects(sdrstr, new TypeToken<ArrayList<SdSdPer>>() {}.getType()) ;
41                 }
42             }
43             
44             return rlist;
45         } catch (Exception e) {
46             log.error(e.getMessage());
47             e.printStackTrace();
48         }
49         return null;
50     }

在这里  首先是判断登录用户   随后对遍历出来的所有结果进行筛选,满足条件的放进一个新的数组。最后删除第一个空的元素。

当然  还有一种思路是把不满足条件的元素直接从所有结果中删除  再直接遍历然后显示到页面上

 ---------------------------------------------------------------------------------------------------------------------------------------------------------

上述代码整理后:

    @Override
    public List<SdSdPer> listResults(String sidx, String sord) {
        try {
            List<SdSdPer> results = Collections.emptyList();  
            rlist = new ArrayList<SdSdPer>(results);
            String setC = setCdtInit(sidx, sord);//setC------>{"chenbanrenid":"****" }json对象
            String rstr = oaboSvc.getSdrs(setC);//rstr------>[{"oid":"----":"史红波"}]  所有送达人员的信息json数组
            System.out.println("rstr------->"+rstr);
            if (bauser.getUserName().equals("admin")) {
                if(!StringUtil.isEmpty(rstr) && !rstr.equals("[]")){
                    rlist = GsonUtil.getObjects(rstr, new TypeToken<ArrayList<SdSdPer>>() {}.getType()) ;
                }
            } else {
                String sdrstr=checkSdr( sidx,  sord);
                System.out.println("sdrstr----->"+sdrstr);
                if(!StringUtil.isEmpty(sdrstr) && !sdrstr.equals("[]")){
                    rlist = GsonUtil.getObjects(sdrstr, new TypeToken<ArrayList<SdSdPer>>() {}.getType()) ;
                }
            }
            
            return rlist;
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 判断送达人员所属
     * @return
     */
    public String checkSdr(String sidx, String sord){
        System.out.println("/////////////"+"人员筛选"+"///////////");
        String rstr="";
        String rstr1=null ;
        String sdrstr=null;
        try {
            String setC = setCdtInit(sidx, sord);//setC------>{"chenbanrenid":"****" }json对象
            rstr = oaboSvc.getSdrs(setC);//rstr------>[{"oid":"----":"史红波"}]  所有送达人员的信息json数组
            //筛选结果json数组
            JSONArray jsonarr=JSONArray.fromObject(rstr1);
            //json对象  
            JSONObject  jo1 = JSONObject.fromObject(setC);
            //获取相应key的值   (登录用户的id值作为承办id)
            String chenbanrenid1 = jo1.getString("chenbanrenid");
            //json数组
            JSONArray jo2=JSONArray.fromObject(rstr);
            for (int i = 0; i < jo2.size(); i++) {
                //遍历json数组  取出一个json对象
                JSONObject  jsonobj = jo2.getJSONObject(i);
                System.out.println("===================="+jsonobj);
                String chenbanrenid2=jsonobj.getString("chenbanId");
                //判断两者id是否一致   一致的话将遍历出来的json对象放进 筛选结果json数组
                System.out.println("chenbanrenid1==chenbanrenid2:"+chenbanrenid1.equals(chenbanrenid2));
                if(chenbanrenid1!=null && chenbanrenid2!=null &&chenbanrenid1.equals(chenbanrenid2)){
                    //把这条数据添加到json数组中
                    jsonarr.add(jsonobj);
                }
            }
            jsonarr.remove(0);
            sdrstr=jsonarr.toString();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        return sdrstr;
    }
    

参考  :json字符串、json对象、数组 三者之间的转换

      java和js中JSONObject,JSONArray,Map,String之间转换——持续更新中

本文仅作为个人记录。

可供参考。

2017-11-13    08:48:56

2017-11-18    09:04:43   更新

原文地址:https://www.cnblogs.com/angelye/p/7824747.html