深入了解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除了完成功能需要,还要尽量不要改变数据库原型
深入了解Json转变为map的思想,附源代码2的更多相关文章
- json字符串转map
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</ar ...
- fastJson将json字符串转换为map
public class JsonUtil { /** * 将json转化成map * @param jsonStr * @return */ public static Map<String, ...
- JSON字符串与Map互转
//一.map转为json字符串 public static String map2jsonstr(Map<String,?> map){ return JSONObject.toJSON ...
- Json字符串转map集合
第一步:在pom.xml中添加依赖; <dependency> <groupId>com.alibaba</groupId> <artifactId>f ...
- json字符串转Map、json数组
json数组转map public static void main(String[] args){ String strArr = "[{\"0\":\"zh ...
- go语言之进阶篇json解析到map
1.json解析到map(通过类型断言,找到值和value类型) 示例: package main import ( "encoding/json" "fmt" ...
- JSON字符串转换为Map
本文是利用阿里巴巴封装的FastJSON来转换json字符串的.例子如下: package com.zkn.newlearn.json; import com.alibaba.fastjson.JSO ...
- [GO]json解析到map
package main import ( "encoding/json" "fmt" ) var str string func main() { m := ...
- C++实现json字符串与map的转换
开源资源库 jsoncpp-src-0.5.0.tar.gz:https://sourceforge.net/projects/jsoncpp/ jsoncpp-master.ziphttps://g ...
随机推荐
- [Qt]No relevant classes found.
[Qt]No relevant classes found. 我把两个文件加入工程的时候,再编译就出现了No relevant classes found.这个bug.百度了下,找到了答案,参考链接: ...
- BeanFactory调用getbean()对象
Spring通过资源加载器加载相应的XML文件,使用读取器读取资源加载器中的文件到读取器中,在读取过程中,解析相应的xml文件元素,转化为spring定义的数据结BeanDefinition,把相应的 ...
- SEO学习之路
一.入门建站篇 1.Wamp集成环境安装 2.Wamp集成环境配置多站点 3.DedeCMS安装及目录结构 4.DedeCMS源码安装 5.DedeCMS官方手册 未完待续...
- h5新特性
!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></ ...
- lesson3:使用java代码的方式对不能识别的协议进行压力测试
在我们的实际环境中,我们所使用的协议肯定不只是http的方式,对于rpc等调用协议,目前jmeter没有相应的sampler支持,这时就需要通过引入我们自己写的jar包的方式来解决这个问题.例如:当我 ...
- python实现websocket服务器,可以在web实时显示远程服务器日志
一.开始的话 使用python简单的实现websocket服务器,可以在浏览器上实时显示远程服务器的日志信息. 之前做了一个web版的发布系统,但没实现在线看日志,每次发布版本后,都需要登录到服务器上 ...
- HID 报告描述符精细说明.
1,报告描述符概述 1.1) 报表描述符 报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的.报表描述符非常复杂而有弹性,因为它 ...
- Linux命令 tar 打包解压缩
--打包:tartar -cvf 命名文件.tar 要压缩的目录tar -xvf 要解压的包.tartar -tf 要查看的包.tartar -f 包.tar -r file ...
- iOS_SN_百度地图基本使用(1)
上次用了一次百度地图,一直没有记笔记,今天记一笔. 以前没有用过百度地图的时候,听做这方面的朋友说百度地图有不少的坑,但是我做的时候没有遇到太大的坑,主要是要注意官方文档的注意事项,还有配置环境开发中 ...
- (二)HTML5 - Web SQL 本地数据库
简介 WEB SQL Database即本地的SQLite数据库,使用的方式和方法和SQLite基本相同 判断浏览器是否支持 if (!window.openDatabase) { alert('Da ...