zoukankan      html  css  js  c++  java
  • 深入了解Json转变为map的思想,附源代码2

    最近在做一个投票情况的用例,返回的结果打算放到JSON中


    数据库的结果集如上图所示:optionkey代表选项,optionval代表其值

    第一次做的时候考虑应该键值对应的关系,所以前台接到的json  应该以A:t ,B:p这种形式保存

    则第一次写法:

    Map m = new HashMap();
    List<Map> l = restConversationService.getTPOptions(tmpId);//取结果集
    Iterator<Map> it = l.iterator();
    Map map=null;//存储结果集的行
    Map optionMap = new HashMap();//定义一个新的键
    while(it.hasNext())
    {
    map =(Map)it.next();
    	optionMap.put((String) map.get("optionkey"), (String) map.get("optionval"));
    }
    	
    	m.put("optionMap", optionMap);
    	m.put("content",Base64.encode(tmp.get("content").toString().getBytes()));
    tmp.put("content", m);//tmp里还有其他东西略,只看content就行

    前台效果如上图所示,缺点:这更像是一个实体的两个属性,而非两条记录。且以后不能排序,扩展性不太好。

    第二次尝试,为了排序,可不可以把KEY放到一个list,value放到一个list,实现一一对应。

    Map m = new HashMap();
    List<Map> l = restConversationService.getTPOptions(tmpId);
    Iterator<Map> it = l.iterator();
    Map map=null;
    
    List valList =new ArrayList();//定义两个list分别存放数据库取出的键和值
    List keyList =new ArrayList();
    
    while(it.hasNext())
    {
    	map =(Map)it.next();
    	keyList.add((String) map.get("optionkey"));//放键
    	valList.add((String) map.get("optionval"));//放值
    }
    	m.put("optionkey", keyList);
    	m.put("optionval", valList);
    	m.put("content",Base64.encode(tmp.get("content").toString().getBytes()));
    tmp.put("content", m);

    效果:

    缺点:似乎虽然有了排序但是键值关系不那么呼应了,且虽然不那么像1个实体的两个属性,但是感觉两者没太大关系。

    那么看第三种写法:

    Map m = new HashMap();
    List<Map> l = restConversationService.getTPOptions(tmpId);
    Iterator<Map> it = l.iterator();
    Map map=null;
    List dataList = new ArrayList();//存放格式与数据库保持一致,datalist里是MAP
    while(it.hasNext())
    {
    	map =(Map)it.next();
    	Map<String, String> dataMap = new HashMap<String, String>();//datalist要放的map
    	dataMap.put((String) map.get("optionkey"), (String) map.get("optionval"));//放入选项 和选项值的对应关系
    	dataList.add(dataMap);
    	
    }
    	m.put("d", dataList);
    	
    	m.put("content",Base64.encode(tmp.get("content").toString().getBytes()));
    	tmp.put("content", m);


    效果:

    从上图看出,返回的JSON没有改变原来数据库存储的形式,仍然是两行记录,键值清晰。

    返回的JSON除了完成功能需要,还要尽量不要改变数据库原型



  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/riskyer/p/3239161.html
Copyright © 2011-2022 走看看