最近在做一个投票情况的用例,返回的结果打算放到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除了完成功能需要,还要尽量不要改变数据库原型

深入了解Json转变为map的思想,附源代码2的更多相关文章

  1. json字符串转map

    <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</ar ...

  2. fastJson将json字符串转换为map

    public class JsonUtil { /** * 将json转化成map * @param jsonStr * @return */ public static Map<String, ...

  3. JSON字符串与Map互转

    //一.map转为json字符串 public static String map2jsonstr(Map<String,?> map){ return JSONObject.toJSON ...

  4. Json字符串转map集合

    第一步:在pom.xml中添加依赖; <dependency> <groupId>com.alibaba</groupId> <artifactId>f ...

  5. json字符串转Map、json数组

    json数组转map public static void main(String[] args){ String strArr = "[{\"0\":\"zh ...

  6. go语言之进阶篇json解析到map

    1.json解析到map(通过类型断言,找到值和value类型) 示例: package main import ( "encoding/json" "fmt" ...

  7. JSON字符串转换为Map

    本文是利用阿里巴巴封装的FastJSON来转换json字符串的.例子如下: package com.zkn.newlearn.json; import com.alibaba.fastjson.JSO ...

  8. [GO]json解析到map

    package main import ( "encoding/json" "fmt" ) var str string func main() { m := ...

  9. C++实现json字符串与map的转换

    开源资源库 jsoncpp-src-0.5.0.tar.gz:https://sourceforge.net/projects/jsoncpp/ jsoncpp-master.ziphttps://g ...

随机推荐

  1. css+javascript 写的HTML5 微信端输入支付密码键盘

    微信端没有纯数字键盘,用html5写了一个模仿ios输入支付密码键盘效果 keyboard.js var _keyboard = {}; $(document).ready(function(){ _ ...

  2. servletContext百科

    servletContext 编辑   servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图.ServletContext实例是通过 getServl ...

  3. ionic学习教程地址梳理

    Ionic是一个新的.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户界面范例,例如像列表(lists).标签 ...

  4. form表单提交之前推断

    1.使用onsubmit方法 <form name="Form" action="t" method="post" onsubmit= ...

  5. 每天进步一点点——Linux系统时间来处理

    转载请注明出处:http://blog.csdn.net/cywosp/article/details/25839551 在程序中时间处理往往是一个麻烦的事.Linux系统提供了非常多关于时间处理的函 ...

  6. 十二.200多万元得到的创业教训--app名字是关键

    摘要:当完毕了一个app后,就要须要上应用市场,以下讲一下起名和上应用市场的一些技巧. 健生干货分享:第12篇 1.必须是先上app store,再上其它应用市场 为啥要这样做?由于app store ...

  7. Fragement理解

    ■ 初衷 可重用,碎片化UI,适应大屏幕pad和小屏幕手机 ■ 优点 自行控制加入,移除,交换. activity则由framework深度掌管. 切换流畅 模块化(逻辑上切割处理)   缺点带来额外 ...

  8. iOS分享 - AFNetworking之多图片/文件上传

    在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...

  9. DOM4J 解析 XML

    1.在项目根目录下新建lib文件夹 2.把dom4j文件拷贝到lib文件夹 3.dom4j,右键Build Path---->Add To Build Path 这样就添加dom4j到项目成功 ...

  10. POj3421 X-factor Chains(质因数分解+排列组合)

    POj3421X-factor Chains 一开始没读懂题意,不太明白 Xi | Xi+1 where a | b means a perfectly divides into b的意思,后来才发现 ...