class Bean {
private Long aLong;
public Long getaLong() {
return aLong;
}
public void setaLong(Long aLong) {
this.aLong = aLong;
}
}
/**
* fastjson根据整型数值的大小反序列化
* 如果数值大小在int范围内, 就用integer反序列化;
* 如果数值大小超过int范围, 就用Long反序列化;
* <p>
* 不管json字符串中整型的数值大小是在int范围还是在long范围,用long类型来接收, 总不会错的;
* <p>
* 但是如果是在反序列化的是Integer类型的数值,把Integer强转成Long肯定要抛出异常的;
* <p>
* 为了避免异常, 先把数值转成字符串, 然后再用
* Long.valueOf(String.valueOf(map.get("aLong")));
* <p>
* <p>
* <p>
* test1:验证fastjson根据整型数值大小决定反序列化后的整型类型是Integer还是Long
* <p>
* Long到Long
*/
@Test
public void test1() {
long l = Long.valueOf(String.valueOf(Integer.MAX_VALUE)) + 1;
//[{"aLong":2147483648},{"aLong":2147483648},{"aLong":2147483648}]
List<Bean> beans = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Bean bean = new Bean();
bean.setaLong(l);
beans.add(bean);
}
String beansJson = JSON.toJSONString(beans);
System.out.println(beansJson);
List<Map> list = JSON.parseArray(beansJson, Map.class);
for (Map map : list) {
Long aLong = Long.valueOf(String.valueOf(map.get("aLong")));
System.out.println(aLong);
}
}
/**
* Integer 到 Long
*/
@Test
public void test2() {
List<Bean> beans = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Bean bean = new Bean();
bean.setaLong(Long.valueOf(i));
beans.add(bean);
}
String beansJson = JSON.toJSONString(beans);
List<Map> list = JSON.parseArray(beansJson, Map.class);
for (Map map : list) {
Long aLong = Long.valueOf(String.valueOf(map.get("aLong")));
System.out.println(aLong);
}
}
fastjson整型数值问题
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 数值分析读书笔记(5)数值逼近问题(I)----插值极其数值计算 给出一般性的插值概念 给定,已知它在n+1个互异...