使用net.sf.json.JSONObject转jsonObject的问题

发现个诡异问题,就是使用net.sf.json.JSONObject来将字符串对象转换成jsonObject时,对于数值类型的属性,一些特殊的数值在转换过程中会被改变,所以在使用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());
    }

另外还有一些方法就是:

1、json-lib.jar降级到2.3 
2、重写net.sf.json.util.JSONTokener的417行,改成 return NumberUtils.createBigDecimal(s);

 

原因具体可以参考:http://leaver.me/2015/11/25/json-lib%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98/

转载于:https://my.oschina.net/u/730579/blog/702743

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值