FastJson整形数据反序列化的坑
2019-04-19 01:03
3367 查看
版权声明:阅读优秀源码,宛若一场探索未知的旅行,疑惑处惊奇,优雅处旖旎; 一切都是新奇的,千回百转与大师的心灵触碰,一场跨越时空的对话,涤荡了原有的愚昧,蜕变出更好的自己。 https://blog.csdn.net/FENGQIYUNRAN/article/details/89391373
在开发过程中,遇到了一个json数据反序列化的坑,具体代码如下:
[code]1 String viewValue = "..............."; #这里是json字符串 2 JSONObject viewObject = JSONObject.parseObject(viewValue); 3 JSONObject videoObject = (JSONObject) viewObject.get("video"); 4 Integer viewCount = new Integer(0); 5 if(videoObject.get("viewCount") != null) { 6 viewCount = (Integer) videoObject.get("viewCount"); #有时会报出异常 7 }
这里的坑就出现在第6行代码,我这里目标是要获取viewCount的key对应的整形值,经过几次测试也没有发现什么异常。但是当提交给测试被测试同学报出异常了。那么具体原因是什么?直白地说,fastjson在将整形的value值反序列化时,会根据值得具体长度生成不同的类型,一旦值超过Integer型的表达范围就会反序列化成Long; 在Integer以内会反射为Integer。我测试的值都比较按照线上可能的数据范围来测试的,而测试同学会更多覆盖一些边缘情况,于是就反序列化出了Long,但Long是不能强制转化为Integer的。
那么该如何处理?需要经过字符串,再转到Long就不会有什么问题了,代码如下:
[code]if(videoObject.get("viewCount") != null) { viewCount = Long.valueOf(String.valueOf(videoObject.get("viewCount"))); }
需要说明的是,我这里属于比较新的版本:
[code] <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
相关文章推荐
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- java分享第十三天(fastjson生成和解析json数据,序列化和反序列化数据)
- 用fastjson将数据序列化和反序列化给jfinal的model的方案
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- java中fastjson生成和解析json数据(序列化和反序列化数据)
- fastjson生成和解析json数据,序列化和反序列化数据
- fastjson生成和解析json数据,序列化和反序列化数据
- bootstrap table处理含有子集json的数据以及fastjson禁止循环引用的问题
- Jsoup+FastJson制作新闻数据接口-Demo
- fastjson、gson、jackson序列化和反序列化性能对比
- 【第28篇】通过Gson和FastJson格式化Json数据
- fast-json 生成与解析json数据
- Springboot学习笔记(一)FastJson解析JSON数据
- spring mvc fastJson 自定义类型转换(返回数据) 实现对ObjectId类型转换