版本说明
fastjson=>1.1.37
具体显示如下
public class MyFastJsonTest {
public static void main(String[] args) {
Map<String, Object> stringObjectMap = new TreeMap<>();
stringObjectMap.put("score", 1.0);
String s = JSON.toJSONString(stringObjectMap);
System.out.println(s);
}
}
控制台
{"score":1}
可以发现其将1.0的小数精度丢失
why
源码路径
E:\javadepsoft\repositorys\com\alibaba\fastjson\1.1.37\fastjson-1.1.37.jar!\com\alibaba\fastjson\serializer\DoubleSerializer.class
原因
解决方案
自定义数据过滤器
原理就是利用BigBecimal数据转换返回不会出现进度丢失的问题
ValueFilter valueFilter = new ValueFilter() {
@Override
public Object process(Object object, String name, Object value) {
if (value instanceof Double || value instanceof Float) {
return new BigDecimal(value.toString());
}
return value;
}
};
String s1 = JSON.toJSONString(stringObjectMap, valueFilter);
{"score":1.0}