String转成JSON
这个依赖很重要,我们将围绕fastjson中的JSONObject这个类来谈转换

 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.15</version>
 </dependency>

String转成JSON

 String json = "{"abc":"1","hahah":"2"}";
 JSONObject jsonObject = JSONObject.parseObject(content);

一句话就能解决,非常便捷。
想要取出值,可以对`jsonObject`进行操作:
jsonObject.getString("abc");
结果为:`1`

将String转为list后转为JSON

 List<String> list = new ArrayList<String>();
 list.add("username");
 list.add("age");
 list.add("sex");
 JSONArray array = new JSONArray();
 array.add(list);

将String转为map后转为JSON

 Map<String, String> map = new HashMap<String, String>();
 map.put("abc", "abc");
 map.put("def", "efg");
 JSONArray array_test = new JSONArray();
 array_test.add(map);
 JSONObject jsonObject = JSONObject.fromObject(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 = JSONObject.parseObject(jsonObject.getString("userAnswer"));
但是想获取key"28568"就没这么容易了。直接像上述的写法,会报错。
我们浏览fastjson中的源码,总结下,应该如下写:
JSONObject question = (JSONObject) JSONObject.parseObject(section.getString("28568"), Object.class);
整体代码:

dao代码很容易,就不贴出来了。

 package com.xiamenair.training.business.service;
 import com.alibaba.fastjson.JSONObject;
 import com.xiamenair.training.business.dao.elearningdao.ELearningExamInstanceDao;
 import com.xiamenair.training.business.dao.masterdao.ELearningChoiceRecordDao;
 import com.xiamenair.training.business.model.LasChoiceRecord;
 import com.xiamenair.training.business.model.entity.elearning.LasExamInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.sql.Blob;
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 @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 SingletonRecordInstance.choiceRecord;
 }
 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 = Calendar.getInstance();
 calendar.setTime(date);
 calendar.add(calendar.DATE, -1);
 date = calendar.getTime();
 String dateString = simpleDateFormat.format(date);
 List<BigDecimal> instanceIdList = eLearningExamInstanceDao.findInstanceIdByFinishTime(dateString);
 if(0 != instanceIdList.size()){
 LasChoiceRecord lasChoiceRecord = getMapInstance();
 instanceIdList.stream().forEach(instanceId -> {
 Blob answerBlob = eLearningExamInstanceDao.findUserAnswer(instanceId);
 Long userId = eLearningExamInstanceDao.findUserId(instanceId);
 String content = null;
 try {
 content = new String(answerBlob.getBytes((long) 1, (int) answerBlob.length()));
 } catch (SQLException e) {
 e.printStackTrace();
 System.out.println("SQLEXCEPTION:" + e);
 }
 JSONObject jsonObject = JSONObject.parseObject(content);
 //针对本section的"公共"属性直接设置
 lasChoiceRecord.setUserId(userId);
 lasChoiceRecord.setPaperType(jsonObject.getString("paperType"));
 lasChoiceRecord.setPaperId(jsonObject.getString("paperOid"));
 lasChoiceRecord.setExamInstanceId(jsonObject.getString("instanceId"));
 lasChoiceRecord.setRemainingTime(jsonObject.getString("remainingTime"));
 lasChoiceRecord.setExamId(jsonObject.getString("examOid"));
 //针对section中的题目进行细化循环拆分
 JSONObject userJson = JSONObject.parseObject(jsonObject.getString("userAnswer"));
 Set sectionSet = userJson.keySet();
 Iterator<String> setIt = sectionSet.iterator();
 analyzeAnswer(lasChoiceRecord, userJson, setIt);
 });
 }
 }
 private void analyzeAnswer(LasChoiceRecord lasChoiceRecord, JSONObject userJson, Iterator<String> setIt) {
 while (setIt.hasNext()) {
 //对每个question进行再次拆分出题目
 JSONObject section = (JSONObject) JSONObject.parseObject(userJson.getString(setIt.next()), Object.class);
 Set questionSet = section.keySet();
 Iterator<String> queIt = questionSet.iterator();
 while (queIt.hasNext()) {
 JSONObject question = (JSONObject) JSONObject.parseObject(section.getString(queIt.next()), Object.class);
 String userAnswer = question.getString("answer");
 String userScore = question.getString("userScore");
 lasChoiceRecord.setQuestionId(question.getString("qId"));
 lasChoiceRecord.setRecordId(UUID.randomUUID().toString());
 eLearningChoiceRecordDao.save(lasChoiceRecord);
 }
 }
 }
 }

JSON转换的实现的更多相关文章

  1. json转换成对象

    在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...

  2. Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 (转)

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...

  3. json转换数据后面参数要带ture,代码

    强大的PHP已经提供了内置函数:json_encode() 和 json_decode().很容易理解,json_encode()就是将PHP数组转换成Json.相反,json_decode()就是将 ...

  4. iOS Json转换模型库:YYModel

    iOS Json转换模型库:YYModel   其实在研究这个库之前,市面上已经有很多类似的模型序列化成JSON及反序列化库(如Mantle.MJExtension)了,推荐他只是因为他高端的性能和容 ...

  5. miniui datagrid 保存到服务端,使用.NET 自带 JSON 转换时发现日期格式不兼容。

    使用 miniui datagrid 修改表格后,保存到服务端,然后使用 .NET 自带 JSON 转换,会抛出DateTime 内容“2015-12-27T11:02:28”未按 JSON 的要求以 ...

  6. 从零开始学android开发-Json转换利器Gson之实例

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...

  7. Jackson框架,json转换

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...

  8. json转换(c#后台生成json的方法)

    此文转自:http://bbs.csdn.net/topics/380200497,为了方便自己记忆才以文章形式保存. using System; using System.Collections.G ...

  9. C#将XML转换成JSON转换XML

    原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...

  10. ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)

    本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...

随机推荐

  1. 创业学习---《调研黑客上:锁定调研目标》--D-2.调研模块---HHR计划---以太一堂

    第一,开始学习: 思考题: (1)你的项目有哪些值得关注的竞争对手?为什么是这些,你是如何分类的? (2)拿出其中一个产品,你会怎么分析他? 第一,<明确调研目标>(补充) 1,调研4大类 ...

  2. 连接(JOIN)

    join 用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. INNER JOIN 从多个表中返回满足 JOIN 条件的所有行. INNER JOIN:如果表中有至少一个匹配,则返回行 L ...

  3. Windows Server 2012R2 实现AD双域控制器互为冗余

    前言 在部署活动目录服务的时候,首先应该考虑域控制器的安全性,主域控一旦崩掉,一般很难修复,后果非常严重,本文介绍在活动目录中部署两台域控制器,两台都是主控,互为冗余. 环境网络192.168.100 ...

  4. windowsCMD常用工具

    就目前的经验来看cmd中的命令可以在power shell中正常使用,反之则不行. 另外,据某些现象,推断某些cmd应用使用的字符集应该是不同的.net命令会在utf-8编码下出现中午乱码. 1.ne ...

  5. chkconfig 原理 (企业应用)

    企业应用:如何让某个服务开机自启动 chkconfig --level 345 serviceName on chkconfig --level 345 serviceName off chkconf ...

  6. python 中的 int() 与 round

    int(x):向下取整 round(x):超过 .5 则向上取整,否则向下取整

  7. juypter

    juypter 1.      jupyter 1.1.    它是什么? Jupyter Notebooks 是一款开源的网络应用,我们可以将其用于创建和共享代码与文档. 以前叫ipython no ...

  8. 【C#】图解如何添加引用using MySql.Data.MySqlClient;

    使用C#连接MySQL时,经常会用到命名空间using MySql.Data.MySqlClient; 这说明VS中没有添加引用,解决方法如下: 1,可点击以下两个链接的其中任何一个,下载MySQL. ...

  9. webpack-bundle-analyzer插件的使用方式

    第一步: npm install --save-dev webpack-bundle-analyzer 第二步: 在build/webpack.prod.config.js中的module.expor ...

  10. 电源适配器DC插头规格

    电源适配器 DC 插头的内径外径规格有 (单位为 MM) :2.0*0.72.35*0.72.35*1.12.5*0.73.5*1.13.5*1.354.0*1.75.5*2.15.5*2.54.75 ...