String转成JSON
这个依赖很重要,我们将围绕fastjson中的JSONObject这个类来谈转换
欢迎工作一到八年的Java工程师朋友们加入Java高级交流群:854630135
本群提供免费的学习指导 架构资料 以及免费的解答
不懂得问题都可以在本群提出来 之后还会有直播平台和讲师直接交流噢
<dependency> <groupId></groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency>
- String转成JSON
String json = "{"abc":"1","hahah":"2"}"; JSONObject jsonObject = (content); 一句话就能解决,非常便捷。 想要取出值,可以对`jsonObject`进行操作: ("abc"); 结果为:`1`
- 将String转为list后转为JSON
List<String> list = new ArrayList<String>(); ("username"); ("age"); ("sex"); JSONArray array = new JSONArray(); (list);
- 将String转为map后转为JSON
Map<String, String> map = new HashMap<String, String>(); ("abc", "abc"); ("def", "efg"); JSONArray array_test = new JSONArray(); array_test.add(map); JSONObject jsonObject = (map);
特别注意:从JSONObject中取值,碰到了数字为key的时候,如
{ "userAnswer": { "28568": { "28552": { "qId": "28552", "order": "1", "userScore": { "score": 100 }, "answer": { "28554": "28554" }, "qScore": "100.0", "qtype": "SingleChoice", "sId": "28568" } } }, "paperType": "1", "paperOid": "28567", "instanceId": 30823, "remainingTime": -1, "examOid": "28570" } 获取“userAnswer”的value,再转成JSON,可仿照如下形式: JSONObject userJson = (("userAnswer")); 但是想获取key"28568"就没这么容易了。直接像上述的写法,会报错。 我们浏览fastjson中的源码,总结下,应该如下写: JSONObject question = (JSONObject) (("28568"), );
整体代码:
dao代码很容易,就不贴出来了。 package ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import .*; @Service public class ChoiceRecordService { //查询数据Dao @Autowired private ELearningChoiceRecordDao eLearningChoiceRecordDao; //转储数据Dao @Autowired private ELearningExamInstanceDao eLearningExamInstanceDao; private ChoiceRecordService() { } private static class SingletonRecordInstance { private static final LasChoiceRecord choiceRecord = new LasChoiceRecord(); } public static LasChoiceRecord getMapInstance() { return ; } private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); /** * 定时任务,每天定时将E学网考试数据分析并转储 * * @param : instanceIdList * @return : void * @author : 28370·皮育才 * @date : 2018/11/20 **/ @Scheduled(cron = "00 00 01 * * ?") public void analysisChoiceRecord() { //获取前一天的时间 Date date = new Date(); Calendar calendar = (); (date); (, -1); date = (); String dateString = (date); List<BigDecimal> instanceIdList = (dateString); if(0 != ()){ LasChoiceRecord lasChoiceRecord = getMapInstance(); ().forEach(instanceId -> { Blob answerBlob = (instanceId); Long userId = (instanceId); String content = null; try { content = new String(((long) 1, (int) ())); } catch (SQLException e) { (); ("SQLEXCEPTION:" + e); } JSONObject jsonObject = (content); //针对本section的"公共"属性直接设置 (userId); (("paperType")); (("paperOid")); (("instanceId")); (("remainingTime")); (("examOid")); //针对section中的题目进行细化循环拆分 JSONObject userJson = (("userAnswer")); Set sectionSet = (); Iterator<String> setIt = (); analyzeAnswer(lasChoiceRecord, userJson, setIt); }); } } private void analyzeAnswer(LasChoiceRecord lasChoiceRecord, JSONObject userJson, Iterator<String> setIt) { while (()) { //对每个question进行再次拆分出题目 JSONObject section = (JSONObject) ((()), ); Set questionSet = (); Iterator<String> queIt = (); while (()) { JSONObject question = (JSONObject) ((()), ); String userAnswer = ("answer"); String userScore = ("userScore"); (("qId")); (().toString()); (lasChoiceRecord); } } } }