最近在使用
fastjson
处理类型转换的时候,如果不正确使用很容易导致结果不对,因此总结了下经验,记录如下:
1. 测试代码
public void jsonTest() {
Long idLong = 99L;
// 将Long类型转成String
String idStr = idLong.toString();
// 使用fastjson把Long直接转换为json字符串
// 直接转换可以保证生成的是数字类型的json
String jsonLong = JSON.toJSONString(idLong);
// 把String类型的数据再转为json字符串
// 这种方式会把数字数据加上双引号
String jsonString = JSON.toJSONString(idStr);
// 打印出两种方式生成的json字符串,查看区别
System.out.println("jsonLong = " + jsonLong);
System.out.println("jsonString = " + jsonString);
// 将字符串类型的json再解析成Long类型
// 这里因为jsonString是字符串格式,所以可以成功解析
// 如果是数字类型的json,直接解析为Long会失败
System.out.println("jsonString = " + JSON.parseObject(jsonString,Long.class));
// 因为该json中包含双引号,执行的时候会报错
//System.out.println("Long.parseLong(jsonSting) = " + Long.parseLong(jsonString));
}
2. 运行结果
jsonLong = 99
jsonString = "99"
Long.parseLong(jsonLong) = 99
如果去掉注释会有以下报错信息:
3. 总结分析
从上面的代码和结果可以看出:
对Long
类型直接使用toJSONString()
,可以正确转换为json字符串,处理的时候可以直接转回Long
类型。
但如果先把Long
转成String
,再使用toJSONString()
,结果会加上双引号,变成字符串格式,处理时需要使用parseObject()
才可以把字符串格式的数字json
解析为Long
类型。