項目數據庫用戶答題卡設計以及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");