深入了解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除了完成功能需要,还要尽量不要改变数据库原型


  • 还有一种是这样的形式,直接
    [
    • {
      • optionkey: "A",
      • optionval: "t"
      },
    • {
      • optionkey: "B",
      • optionval:"p"
      }
    ]
    比较符合数据库的格式,虽然客户端好解析(eval(optionkey)就行),但是传输的内容太多,我还是用第三种通过Set s = map.keySet()一下得到所有的KEY值再解析


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值