使用Hashtable和List结合拼json数据

在做项目的时候,有时候需要向页面返回一个特定的json类型的数据,一般情况下会有下面的方法进行拼接:

    public String chongzhiList() throws Exception {
        List list = new ArrayList();
        if (StringUtils.isNotEmpty(psCode)) {
            
            list = totalQuantityManager.findPsList(psCode);
        }
        //创建StringBuffer类型的变量json,用于存放拼装好的json数据
        StringBuffer json = new StringBuffer("[");
        //如果list不为空则执行if内的for循环
        if(list!=null && list.size()>0){
            for(int i=0;i<list.size();i++){
                Object[] strs = (Object[]) list.get(i);
                json.append("{"id":" + """ + strs[0] + "",");
                json.append(""wuranwu":" + """ + strs[1] + "",");
                json.append(""danwei":" + """ + strs[2] + "",");
                json.append(""yipaifangliang":" + """ + strs[3] + "",");
                json.append(""chongzhiliang":" + """ + strs[4] + "",");
                json.append(""xukeliang":" + """ + strs[5] + "",");
                json.append(""yuliang":" + """ + strs[6] + "",");
                json.append(""icyuliang":" + """ + strs[7] + ""}");
                if(i<list.size()-1){
                    json.append(",");
                }
            }
        }
        json.append("]");
        this.jsonObject = json.toString();
        return JSON;
    }

这种方式在碰到更加复杂的情况下就显得力不从心了,会经常出现一些少逗号,多括号的问题,下面介绍一种方法拼接特定的json类型数据:

利用Hashtable和List结合,使用JSONObject类进行转化的方式会更加的方便,相关文章链接:JSONObject和JSONArray

1.拼出给定的json数据:

{
  "huaXue": [
    400,
    1132,
    601,
    500,
    120,
    90,
    1000
  ],
  "anDan": [
    1320,
    7000,
    601,
    234,
    120,
    50000,
    20
  ],
  "erYangHualiu": [
    1320,
    1132,
    601,
    234,
    120,
    90,
    20
  ],
  "danYangHuawu": [
    1320,
    1132,
    601,
    234,
    120,
    90,
    20
  ]
}

方法如下:

    public String getMonthFlow() throws Exception{
        //创建List对象用来存放接收结果集
        List list = new ArrayList();
        list = totalQuantityManager.getMonthFlow();
        //创建list1,list2,list3,list4分别用来存放每一条数据中的特定值
        ArrayList list1 = new ArrayList();
        ArrayList list2 = new ArrayList();
        ArrayList list3 = new ArrayList();
        ArrayList list4 = new ArrayList();
    
        //for循环用来循环每一条数据,从每一条数据中取出特定的数据放入集合中
        for (int i = 0; i < list.size(); i++) {
            Object[] strs = (Object[]) list.get(i);
            list1.add(strs[1]);
            list2.add(strs[2]);
            list3.add(strs[4]);
            list4.add(strs[5]);
        }
        
        
        //创建一个哈希表对象,用于装载键值对形式的数据
        Hashtable dic = new Hashtable();
        dic.put("huaXue",list1);
        dic.put("anDan",list2);
        dic.put("erYangHualiu",list3);
        dic.put("danYangHuawu",list4);
        //利用JSONObject类将哈希表对象转换为json类型的数据
        this.jsonObject=JSONObject.fromObject(dic).toString();
    return JSON;
    }   

2.转换下面类型的json数据

{
  "type0": [
    {
      "month": 1,
      "value": 400
    },
    {
      "month": 2,
      "value": 1132
    },
    {
      "month": 3,
      "value": 601
    },
    {
      "month": 4,
      "value": 500
    },
    {
      "month": 5,
      "value": 120
    },
    {
      "month": 6,
      "value": 90
    },
    {
      "month": 7,
      "value": 1000
    }
  ],
  "type1": [
    {
      "month": 1,
      "value": 400
    },
    {
      "month": 2,
      "value": 1132
    },
    {
      "month": 3,
      "value": 601
    },
    {
      "month": 4,
      "value": 500
    },
    {
      "month": 5,
      "value": 120
    },
    {
      "month": 6,
      "value": 90
    },
    {
      "month": 7,
      "value": 1000
    }
  ],
  "type2": [
    {
      "month": 1,
      "value": 400
    },
    {
      "month": 2,
      "value": 1132
    },
    {
      "month": 3,
      "value": 601
    },
    {
      "month": 4,
      "value": 500
    },
    {
      "month": 5,
      "value": 120
    },
    {
      "month": 6,
      "value": 90
    },
    {
      "month": 7,
      "value": 1000
    }
  ],
  "type3": [
    {
      "month": 1,
      "value": 400
    },
    {
      "month": 2,
      "value": 1132
    },
    {
      "month": 3,
      "value": 601
    },
    {
      "month": 4,
      "value": 500
    },
    {
      "month": 5,
      "value": 120
    },
    {
      "month": 6,
      "value": 90
    },
    {
      "month": 7,
      "value": 1000
    }
  ]
}

方法如下:

    public String getMonthFlow() throws Exception{
        //方法一:
        //月份
        String month = "";
        List list = new ArrayList();
        list = totalQuantityManager.getMonthFlow();
        
        ArrayList list1 = new ArrayList();
        ArrayList list2 = new ArrayList();
        ArrayList list3 = new ArrayList();
        ArrayList list4 = new ArrayList();
        
        
        Hashtable dic1 = new Hashtable();
        Hashtable dic2 = new Hashtable();
        Hashtable dic3 = new Hashtable();
        Hashtable dic4 = new Hashtable();
    
        
        for (int i = 0; i < 4*list.size(); i++) {
            Object[] strs = (Object[]) list.get(i%7);
            String monTH = "";
            if (strs[0]!=null) {
                monTH = strs[0].toString().substring(4);
            }
            if ("01".equals(monTH)) {
                month = "1";
            }else if ("02".equals(monTH)) {
                month = "2";
            }else if ("03".equals(monTH)) {
                month = "3";
            }else if ("04".equals(monTH)) {
                month = "4";
            }else if ("05".equals(monTH)) {
                month = "5";
            }else if ("06".equals(monTH)) {
                month = "6";
            }else if ("07".equals(monTH)) {
                month = "7";
            }else if ("08".equals(monTH)) {
                month = "8";
            }else if ("09".equals(monTH)) {
                month = "9";
            }else if ("10".equals(monTH)) {
                month = "10";
            }else if ("11".equals(monTH)) {
                month = "11";
            }else if ("12".equals(monTH)) {
                month = "12";
            }
            if (i/7==0) {
                dic1.put("month", month);
                dic1.put("value", strs[1]);
                list1.add(dic1);
                dic1 = new Hashtable();
            }else if (i/7==1) {
                dic2.put("month", month);
                dic2.put("value", strs[2]);
                list2.add(dic2);
                dic2 = new Hashtable();
            }else if (i/7==2){
                dic3.put("month", month);
                dic3.put("value", strs[3]);
                list3.add(dic3);
                dic3 = new Hashtable();
            }else if (i/7==3) {
                dic4.put("month", month);
                dic4.put("value", strs[4]);
                list4.add(dic4);
                dic4 = new Hashtable();
            }
        }
        //哈希表对象(存放键值对())
        Hashtable dic = new Hashtable();
        dic.put("type0",list1);
        dic.put("type1",list2);
        dic.put("type2",list3);
        dic.put("type3",list4);
        this.jsonObject=JSONObject.fromObject(dic).toString();
        
/*        //方法二:
         List list = new ArrayList();
        list = totalQuantityManager.getMonthFlow();
        Hashtable dic = new Hashtable();
        for(int j=0;j<4;j++){
            ArrayList list_s = new ArrayList();
            //循环行
            for (int i = 0; i < list.size(); i++) {
                Object[] strs = (Object[]) list.get(i);
                Hashtable dic1 = new Hashtable();
                dic1.put("month", strs[0]);
                dic1.put("value", strs[1]);                
                list1.add(dic1);
                Hashtable dic2 = new Hashtable();
                dic2.put("month", strs[0]);
                dic2.put("value", strs[2]);    
                Hashtable dic3 = new Hashtable();
                dic3.put("month", strs[0]);
                dic3.put("value", strs[3]);    
                Hashtable dic4 = new Hashtable();
                dic4.put("month", strs[0]);
                dic4.put("value", strs[4]);    
            
            }
            dic.put("type"+j,list_s);
        }
        this.jsonObject=JSONObject.fromObject(dic).toString();*/
    return JSON;
    }
原文地址:https://www.cnblogs.com/shuilangyizu/p/6039305.html