关注renderJson的问题 long转换出错

	JSONObject jo=new JSONObject();
	jo.put("id", 1536612013134974976l);
	renderJson(jo);

输出

{"id":1536612013134975000}

容器是tomcat6

结合同志们的回复修改结果如下,如果有问题欢迎大家指正

public class JetfLongJson implements ToJson<Long> {

	@Override
	public void toJson(Long value, int depth, JsonResult ret) {

		if (value > -9007199254740991l && value < 9007199254740991l) {
			ret.addLong(value);
		}else{
			ret.addStr(value+"");
		}
	}

}


评论区

huntxt

2022-06-14 16:51

@jfinal 帮我看一下,这个问题

huntxt

2022-06-14 16:52

@jfinal https://jfinal.com/feedback/8298

JFinal

2022-06-14 18:24

输出是在哪里输出的?

如果是浏览器中或者 js 输出的,那么这个值 1536612013134974976l 超出了范围

在浏览器中,按一下 F12,打开开发者工具,然后点击 console,在命名行输入:
var x = 1536612013134974976;
console.log(x);

输出值为:
1536612013134975000
该值已得到确认,与你的输出一样

这个并不是 renderJson 转换出错, google 搜索一下 javascript long , 找找解决方案,一般是将这类可能超出范围的 long 型按 String 处理

huntxt

2022-06-15 08:44

@JFinal ajax请求,js输出,我再测试一下,谢谢

要输就输给追求

2022-06-15 10:04

转成 string 传给前端。Long 在 js 中支持度不好

huntxt

2022-06-15 10:10

@要输就输给追求 谢谢,已处理,超出js的 long范围后转字符串了
if (value > -9007199254740991l && value < 9007199254740991l) {
ret.addLong(value);
}else{
ret.addStr(value+"");
}

zzutligang

2022-06-15 19:10

@huntxt 你这样处理应该是不合适,还是自定义json处理,把long转String吧。

热门反馈

扫码入社