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. 关于C++指针、引用和const关键字的各种关系

    #include <stdio.h> #include<iostream> using namespace std; typedef char *new_type; int m ...

  2. 猴博士4小时讲完C语言视频教程

    猴博士4小时讲完C语言视频教程,一共有9节课. 目录结构如下: 目录:/2020030-猴博士4小时讲完C语言 [1G] ┣━━1.C语言基本语句(上)(更多资源访问:www.jimeng365.cn ...

  3. 2019 EIS高校安全运维赛 misc webshell

    webshell 第一种思路: 1.菜刀都是http协议,发的包都是POST包,所以在显示过滤器下命令:http.request.method==POST 2.右键,追踪tcp流,发现是蚁剑流量 3. ...

  4. Hyperledger Fabric 踩坑汇总

    搭建基础环境 阿里云安装出现的一些问题解决 1. [signal SIGSEGV: segmentation violation code=0x1 addr=xxx pc=xxx] 类似的错误:原始错 ...

  5. ES6-对象的简写方式

        var name = 'tom';     var age = 11;     //es5定义对象     var obj = {         name:name,         age ...

  6. Bug搬运工-CSCvi02106 :Cisco 2800, 3800, 1560 APs: when connected to a Cisco Switch CDP-4-DUPLEX_MISMATCH log is seen

    Cisco 2800, 3800, 1560 APs: when connected to a Cisco Switch CDP-4-DUPLEX_MISMATCH log is seen CSCvi ...

  7. 探讨 Git 代码托管平台的若干问题

    关于 Git 版本控制软件种类繁多,维基百科收录的最早的版本控制系统是 1972 年贝尔实验室开发的 Source Code Control System.1986 年 Concurrent Vers ...

  8. pikachu-xx型注入

    一 xx型注入,一脸懵x,管他什么型注入,先在输入框里随便输入个字符a试试 我们可以发现该传输方式为get型传输,传输的参数为name=a&submit=查询 二 测试使其闭合的符号 加一个单 ...

  9. linux理论知识点(用于考试)

    ps:为其十天左右的linux培训即将结束了,未雨绸缪,为了更好的通过之后的考试,提前多看些考试题和知识点.这是在chinaunix论坛看到的一个帖子,贴来分享. 原文地址:[http://bbs.c ...

  10. python-opencv:读取图片

    代码 import cv2 # 读取一张图片 src = cv2.imread("../images/lena.jpg") # 命名一个窗口 cv2.namedWindow(&qu ...