使用Redis和jackson操作json中遇到的坑
前言(可以略过)
最近在开发一个智能电表的管理系统,与常规的面向业务的系统不同。智能电表特点是每30分钟会向服务器发一次请求,报道自己目前的电表情况。然后服务器根据电表情况统计此电表的电量使用情况,包括日,月,年。不同的小区还有不同的阶梯峰谷电计算策略。不同的缴费时间(需要根据缴费时间生成对应的订单)。并且电表初期预计有10w个,这样就又带来了高并发的问题。
所以此系统主要难点就是实时电量的统计以及高并发。
经过一系列的讨论,终于找到了解决方案:通过redis来对所有的电表数据进行缓存,然后一天进行一次持久化,这样的话就可以减少mysql的压力,但弊端就是redis的数据结构会比较复杂。
正文(问题描述)
在用redis存储获取数据时,发现从redis存入的json字符串无法使用jackson进行对象转换。一开始以为是jackson的使用问题,然后又是看谷歌又是看文档,发现都无法解决。最终debug发现了问题如下:
当把一个对象转换成Json字符串存入redis中,然后再从redis取出时是这样的格式
要转换的对象
class A{
int consumeStep=0;
float totalAmount=0f;
}
从redis中取出后的数据格式:
"{\"consumeStep\":1,\"totalAmount\":0.0}"
可以发现,字符串进行了转义处理。
如果直接把转义的字符串显式赋值给一个变量,编译器会自动把转义字符去除,变成一个正常的json字符:

如果不是显式赋值的,那么原来的转义字符以及开头和结束的双引号都会存在

如果上面的格式想通过显式赋值,要怎么实现呢?需要把每一个转义字符再次转义如下:
String c="\"{\\\"consumeStep\\\":1,\\\"totalAmount\\\":0.0}\"";

那么问题也就解决了,因为不是显式赋值的原因,所以从redis中获取的json字符串会出现多余的双引号和转义字符,造成jackson无法识别解析,解决方法就是把多余的字符去掉:
str=str.substring(1, structureString.length()-1);//去掉开头和结尾的双引号
str=str.replace("\\", "");//去掉转义字符
暂时只能想到这个方法,有更牛方法的同学欢迎留言,一起学习,谢谢。
使用Redis和jackson操作json中遇到的坑的更多相关文章
- Java操作JSON数据(4,end)--Jackson操作JSON数据
Jackson是SpringBoot默认使用的JSON处理库,它可以轻松的将Java对象转换成JSON对象,同样也可以将JSON转换成Java对象.本文介绍下Jackson的基本使用方法,包括序列化和 ...
- 使用jackson序列化json时遇到的坑
公司使用Springboot进行开发,里面默认使用了jackson进行序列化. 但是序列化的过程中一直报错,因此记录一下. ⒈jackson默认大小写敏感,且首字母转小写 在类上添加一下注解即可 @J ...
- JSON相关知识,转载:删除JSON中数组删除操作
一:JSON是什么 JSONg格式:对象是一个无序的“名称/值”对的集合. 对象以括号开始,括号结束. 名称冒号分隔值. "名称/值"之间用逗号分隔 例: var people = ...
- js中如何操作json数据
一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...
- redis的hash操作在集中式session中的应用
在集群部署时,为了高可用性的目的,往往把session进行共享,共享分为两种:session复制和集中式管理. redis在session集中式管理中可以起到比较大的作用. 制约session集中式共 ...
- Spring学习---Spring中利用jackson进行JSON转换
Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...
- JavaScript中使用JSON,即JS操作JSON总结
JSON(JavaScript Object Notation 对象标记) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生 ...
- 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化
Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...
- JS中操作JSON总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
随机推荐
- Pytorch windows10安装教程
强烈建议安装anaconda之后再来安装这个pytorch,具体怎么安装百度搜索就知道了. 温馨提示,在安装anaconda的时候记得将"添加到环境变量"(安装的时候是英文的)这一 ...
- [置顶]
MVC中使用signalR入门教程
一.前言:每次写总要说一点最近的感想 进入工作快半年了,昨天是最郁闷的一天,我怀疑我是不是得了"星期一综合征",每个星期一很没有状态.全身都有点酸痛,这个可能一个星期只有周末才打一 ...
- BZOJ 4819 新生舞会
第一句话:算出3.363636的孩子啊,你跑错流种了. 貌似上一篇我讲SDOI出原题?嘿还真是! 半个月前有一个叫WG的男人给我们搞过一场考试... ... 里面有一道题叫做保密... ...SDOI ...
- bzoj 3139: [Hnoi2013]比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...
- Linux(CentOS6.5_X86.64)编译libjpeg出现“checking host system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized”的解决
本文地址http://comexchan.cnblogs.com/,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢! 今天在编译libjpeg 的时候,遇到下面的报错: checki ...
- C# 调用动态链接库,给游览器写入Cookie
样例代码: class Program { /// <summary> /// 写 /// </summary> /// <param name="lpszUr ...
- display:inline-block引发的间隙思考
一.导火线 没错,总有一类属性在助你轻松寻得捷径的同时,也可为你增添烦劳,比如本文的主谋display:inline-block.众前端们所诸知,其作用是将对象呈递为内联对象,但是对象的内容作为块对象 ...
- Android应用程序启动时发生AndroidRuntime : ClassNotFoundException for Activity class的解决方法
在android应用程序启动时抛出下面异常导致启动失败:07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread ...
- SQLServer Agent执行[分发清除: distribution] 无法删除快照文件
由于之前创建的发布订阅造成严重的性能压力,症状表现为发布订阅表查询产生CMEMTHREAD suspend等待,由于开发配置每隔十分钟会产生大量的SQLCOMMAND(create table,cr ...
- 通过pyenv和virtualenv创建多版本Python虚拟环境
虚拟环境使用第三方工具virtualenv创建,首先输入以下命令检查系统是否已经安装virtualenv. $ virtualenv --version 如果显示virtualenv版本号,则说明已经 ...