net.sf 数字丢失精度处理,得到的依然是net.sf对象

有时候我们使用很多地方使用了net.sf对象,但是突然发现精度丢失,如果这时候换成fastjson什么的要改动很多,网上全是换工具,但是我这里换工作量很大,所以可以用如下的做法。

当然这里间接使用了fastjson来作为中转,但是最后得到的依然是net.sf对象

2022-12-26 修复了json字符串中含有浮点数据类型数值丢失精度情况

/**
	 * 
	 * json格式字符串转换为不丢失精度的net.sf.json格式对象
	 * 
	 * @param json字符串
	 * @return
	 */
	public static JSONObject CNumber(String str){
		
		com.alibaba.fastjson.JSONObject resJsonObjectFJ = com.alibaba.fastjson.JSONObject.parseObject(str);
		
		//由于fastjson并不会把json中含有json字符串的数据自动转换为json对象,因此net.sf拿到的就是字符串对象,所以这里需要进行主动处理
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.registerJsonValueProcessor(String.class, new JsonValueProcessor() {
				
				@Override
				public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
					try {
						com.alibaba.fastjson.JSONObject jsonObjectFJ = com.alibaba.fastjson.JSONObject.parseObject(arg1.toString());
						JSONObject value = JSONObject.fromObject(jsonObjectFJ,arg2);
						return value;
					} catch (Exception e) {
						// TODO: handle exception
					}
					try {

						com.alibaba.fastjson.JSONArray jsonObjectFJ = com.alibaba.fastjson.JSONObject.parseArray(arg1.toString());
						JSONArray value = JSONArray.fromObject(jsonObjectFJ,arg2);
						return value;
					} catch (Exception e) {
						// TODO: handle exception
					}
					return arg1;
				}
				
				@Override
				public Object processArrayValue(Object arg0, JsonConfig arg1) {
					// TODO Auto-generated method stub
					try {
						com.alibaba.fastjson.JSONArray jsonObjectFJ = com.alibaba.fastjson.JSONObject.parseArray(arg1.toString());
						JSONArray value = JSONArray.fromObject(jsonObjectFJ,arg1);
						return value;
					} catch (Exception e) {
						// TODO: handle exception
					}
					return  arg0;
				}
			});
		
		JSONObject resJsonObject = JSONObject.fromObject(resJsonObjectFJ,jsonConfig);
		
		return resJsonObject;
		
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值