使用
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 这坑