使用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,和上面对比简直丧心病狂!!!