JSONObject(net.sf.json)double转换的坑

使用

JSONObject jsonObj = JSONObject.fromObject(map).toString() 会将Double类型的1.0/0.0等数据强制转换为1/0 导致数据格式问题,而0.01等类型数据不会被转换。。。没有找到解决办法,只好换了Gson,而没有出现该问题
找了下JsonObject源码。。发现如下类型转换代码
 
public static String valueToString(Object value) { if(value != null && !isNull(value)) { if(value instanceof JSONFunction) { return ((JSONFunction)value).toString();  } else if(value instanceof JSONString) { String o;  try { o = ((JSONString)value).toJSONString();  } catch (Exception var3) { throw new JSONException(var3);  } if(o instanceof String) { return (String)o;  } else { throw new JSONException("Bad value from toJSONString: " + o);  } } else { return value instanceof Number?numberToString((Number)value):(!(value instanceof Boolean) && !(value instanceof JSONObject) && !(value instanceof JSONArray)?quote(value.toString()):value.toString());  } } else { return "null";  } }

value instanceof Number?numberToString((Number)value) 这里的时候进行了类型转换
 
public static String numberToString(Number n) { if(n == null) { throw new JSONException("Null pointer");  } else { testValidity(n);  String s = n.toString();  if(s.indexOf(46) > 0 && s.indexOf(101) < 0 && s.indexOf(69) < 0) { while(s.endsWith("0")) { s = s.substring(0, s.length() - 1);  } if(s.endsWith(".")) { s = s.substring(0, s.length() - 1);  } } return s;  } }
这里代码看的出来,会将这个number转换为String,而后截取字符串下标0-最后一个0位置,即:(1.0截取后为1.) 第二个if又进行截取,找到下标0-最后一个‘.’位置,进行截取,即将("1."b变成字符串“1”) MD 这坑

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值