发现个诡异问题,就是使用net.sf.json.JSONObject来将字符串对象转换成jsonObject时,对于数值类型的属性,一些特殊的数值在转换过程当中会被改变,因此在使用json格式报文进行交易时,像金额这种数值类型的属性,也应该使用字符串类型进行传递,这样才能安全稳定。json
import net.sf.json.JSONObject;安全
public static void main(String[] args) {
String data = "{\"request\":{\"body\":{\"amt\":163000.24,\"prjCode\":\"BA2016052500000015\",\"opType\":\"1\"},\"head\":{\"messageSn\":\"bea4b5b4ec83444eaab19e0634937ca1\",\"reqTime\":\"20351102105013139\",\"sysCode\":\"pbnc\",\"txCode\":\"2004\",\"version\":\"100\"}}}";
JSONObject jsonObject = JSONObject.fromObject(data);
System.out.println(jsonObject.toString());
}对象
另外还有一些方法就是:ci
一、json-lib.jar降级到2.3
二、重写net.sf.json.util.JSONTokener的417行,改为 return NumberUtils.createBigDecimal(s);字符串