项目数据库用户答题卡设计以及json转化
一、项目答题卡数据库设计
1、介绍
在项目中需要存储用户答题记录,若是单条数据记录太浪费数据库内存,同时也会造成大量数据冗余,所以将用户答题信息作为一个json转为string存储起来。通过Map<String,Object> sheet = new HashMap<String,Object>();来进行答题卡信息存储。
数据库存储答题卡格式如下:
2、json转化
pom文件依赖(阿里fastjson)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.30</version>
</dependency>
a、将map格式信息转化为json再转化为string保存到数据库
// 将map转成json格式 answerSheet是Map格式
JSONObject jsonObject = new JSONObject(answerSheet);
// 将json转成String,方便存入数据库
String answerSheetString = jsonObject.toJSONString();
b、将数据库string转为json返回给前台
// result为string类型
JSONObject resultJson = JSONObject.parseObject(result);
String value = (Map<String,Object>)resultJson;
c、将b中Map<String,Object>json获取right或error答对答错数据信息,需要动态添加或修改答题状态
String answerjson = JSON.toJSONString(answerCard, true);
List<Integer> rightList= JSON.parseArray(JSON.parseObject(answerjson).getString(RIGHT), Integer.class);
if(rightList != null){
rightResultSet = new HashSet<Integer>(rightList);
}
List<Integer> errorList= JSON.parseArray(JSON.parseObject(answerjson).getString(ERROR), Integer.class);
if(errorList != null){
errorResultSet = new HashSet<Integer>(errorList);
}
注意:虽然你保存是set,但是通过该种方式只能以list集合来获取。
d、将数据库中对象数组对象解析解析
数据类型:
解析:
userAnswerSheet1是通过myBatista查询的数据库字段
String answerjson1 = JSON.toJSONString(userAnswerSheet1, true);
JSONObject jsonObject = JSONObject.parseObject(answerjson1);
JSONArray rightArray = (JSONArray)jsonObject.get("right");
JSONArray errorArray = (JSONArray)jsonObject.get("error");