net.sf.json和com.alibaba.fastjson对比

本文对比了net.sf.json与alibaba.fastjson在解析JSON数据时的精度与效率问题,发现alibaba.fastjson不仅保持了高精度,而且在处理大量数据时速度远超net.sf.json。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用net.sf.json.JSONObject解析json精度丢失

{“vector”:[0.0,151.42662048339844,31.855236053466797,4.355315208435059,35.25135803222656,4.608330726623535],“success”:true}
json数据如上面的格式,vector的值是double数组类型,使用net.sf.json.JSONObject方法获取vector的数据:

JSONObject objData = new JSONObject().fromObject(jsonString);
Boolean suc = (Boolean)objData.get("success");
String vecStr = objData.get("feature_vector").toString();

获取到的vecStr值为:0,151.42662,31.855236,4.355315,35.251358,4.6083307。精度由15位,截取到6~7位。
解决方法:
使用com.alibaba.fastjson.JSONObject,如下:

Map obj= JSONObject.parseObject(jsonString, Map.class);
Boolean suc = (Boolean)obj.get("success");
String vecStr =obj.get("feature_vector").toString();

得到的vecStr的值为:[0.0,151.42662048339844,31.855236053466797,4.355315208435059,35.25135803222656,4.608330726623535]

使用net.sf.json.JSONArray.fromObject解析json字符串太慢

有几百个json文件,每个文件70M左右吧,使用 JSONArray.fromObject 方法解析如下:
json文件的格式为:[{“str”: “xxx”, “num”: “2055”}, {“str”: “aaa”,“num”:“2542”},…]

Long  start = System.currentTimeMillis();
JSONArray arrData = JSONArray.fromObject(json);
List<Map<String, String>> maps = JSONArray.toList(arrData, Map.class);
Long  end = System.currentTimeMillis();
System.out.println(end-start);

执行以上程序解析json文件花费126820ms。

使用 com.alibaba.fastjson,代码如下:

Long  start = System.currentTimeMillis();
List<Map> maps =  JSONObject.parseArray(json, Map.class);
Long  end = System.currentTimeMillis();
System.out.println(end-start);

使用alibaba.fastjson执行程序解析json文件花费311ms,和上面对比简直丧心病狂!!!

总结:解析json时还是使用alibaba.fastjson,比较靠谱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值