JSON转换的实现
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转换的实现的更多相关文章
- json转换成对象
在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...
- Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 (转)
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...
- json转换数据后面参数要带ture,代码
强大的PHP已经提供了内置函数:json_encode() 和 json_decode().很容易理解,json_encode()就是将PHP数组转换成Json.相反,json_decode()就是将 ...
- iOS Json转换模型库:YYModel
iOS Json转换模型库:YYModel 其实在研究这个库之前,市面上已经有很多类似的模型序列化成JSON及反序列化库(如Mantle.MJExtension)了,推荐他只是因为他高端的性能和容 ...
- miniui datagrid 保存到服务端,使用.NET 自带 JSON 转换时发现日期格式不兼容。
使用 miniui datagrid 修改表格后,保存到服务端,然后使用 .NET 自带 JSON 转换,会抛出DateTime 内容“2015-12-27T11:02:28”未按 JSON 的要求以 ...
- 从零开始学android开发-Json转换利器Gson之实例
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...
- Jackson框架,json转换
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...
- json转换(c#后台生成json的方法)
此文转自:http://bbs.csdn.net/topics/380200497,为了方便自己记忆才以文章形式保存. using System; using System.Collections.G ...
- C#将XML转换成JSON转换XML
原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...
- ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)
本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...
随机推荐
- 【代码学习】PYTHON 进程
一.进程和程序的区别 编写完毕的代码,在没有运行的时候称之为程序 正在运行的代码,称之为进程 进程除了包含的代码意外,还需要运行的环境等 二.fork import os import time # ...
- Mybatis空指针
查询数据,返回的字段要在 resultMap 中定义, <resultMap id="BaseResultMap" type="com...." > ...
- 【转】docker配置参数详解---/etc/docker/daemon.json完整参数
docker-daemon.json各配置详解 { “api-cors-header”:"", ——————在引擎API中设置CORS标头 “authorization-plugi ...
- c语言实现面向对象编程
1.通用校验器接口(validator.h) #ifndef VALIDATOR_H_INCLUDED #define VALIDATOR_H_INCLUDED #include<stdbool ...
- 电力电子实验 LLC半桥谐振变换器 记录
- Python的基础知识,不同于其他编程语言
1.字符串拼接可以不使用+号 name = "this " "is " "a " "string" 2.使用''' ‘’ ...
- CF10D LCIS 最长公共上升子序列
题目描述 This problem differs from one which was on the online contest. The sequence a1,a2,...,an a_{1}, ...
- vs2008每次build都会重新编译链接 && 项目已经过期
转自:http://blog.csdn.net/movezzzz/article/details/6816605 无外乎两种情况: 1.时间问题,所创建的文件的时间比如是:2011-09-22 09: ...
- MySQL高可用之MHA配置
本文简单介绍了MySQL的高可用实现方式之一的MHA MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其它从节点:通过提升某一从节点为新的主节点,基于主 ...
- UNICODE UTF编码方式解析
先明确几个概念 基础概念部分 1.字符编码方式CEF(Character Encoding Form) 对符号进行编码,便于处理与显示 常用的编码方式有 GB2312(汉字国标码 2字节) ASCII ...