• 做筛选遍历时遇到的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   更新

  • 相关阅读:
    .net中使用事务 dodo
    dnn中NULL值的处理 dodo
    通过sql server的作业调度+存储过程来实现系统定时任务的方法 dodo
    使用With...End With dodo
    ASP.NET页面中使用SolpartMenu控件 dodo
    浅解web打印 dodo
    WEB打印大全(转) dodo
    AjaxMethod未定义原因 dodo
    CommandEventArgs.CommandArgument 属性 dodo
    在用VS.NET2003 新建项目时系统提示 autometion服务器无法创建对象 这是什么问题? dodo
  • 原文地址:https://www.cnblogs.com/angelye/p/7824747.html
Copyright © 2020-2023  润新知