900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java JSON转Map fastjson gson jackson 效率测试对比

Java JSON转Map fastjson gson jackson 效率测试对比

时间:2020-03-30 09:55:18

相关推荐

Java JSON转Map fastjson gson jackson 效率测试对比

测试Java中json字符串转map的效率,

1,使用的json字符串:

40个键值对:50个键值对 = 1:1 = 66986 x 2 = 133972个json,

每个json的key字符串长度=8,且key随机取自于一个800长度的字符串数组,

这个字符串数组中的每个字符串,也是随机生成的,从[a-z,A-Z,0-9]里面随机取8个字符为一个字符串,生成800个到这个数组。

这个json字符串就是一层的,没有再多层的。

2,测试代码

/*** 测试json字符串转map的效率,* 40个键值对:50个键值对 = 1:1 = 66986 x 2 = 133972个json*/private static void testJson(Scanner scanner) {List<String> jsonField = getJsonField(scanner);testJson2Map(jsonField);}/*** 测试json字符串转map的效率*/private static void testJson2Map(List<String> json) {int times = 10;fastJson(json, times);//fastJson2(json, times);gson(json, times);//gson2(json, times);jackson(json, times);}/*** jsonField使用如下方式转json*/private static void fastJson(List<String> json, int times) {long a = System.currentTimeMillis();while (times > 0) {json.forEach(s -> JSON.parseObject(s).get("xxuEeTg5"));times--;}System.out.println("fastJson 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");}/*** 确认过数据之后,json是只有一层的*/private static void fastJson2(List<String> json, int times) {long a = System.currentTimeMillis();while (times > 0) {json.forEach(s -> JSON.toJavaObject(JSONObject.parseObject(s), Map.class).get("xxuEeTg5"));times--;}System.out.println("fastJson2 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");}private static void jackson(List<String> json, int times) {long a = System.currentTimeMillis();while (times > 0) {json.forEach(s->{ObjectMapper mapper = new ObjectMapper();try {Map map = mapper.readValue(s, Map.class);map.get("xxuEeTg5");} catch (IOException e) {e.printStackTrace();}});times--;}System.out.println("执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");}private static void gson(List<String> json, int times) {long a = System.currentTimeMillis();while (times > 0) {json.forEach(s -> {Gson gson = new Gson();Map maps = gson.fromJson(s, new TypeToken<Map>() {}.getType());maps.get("xxuEeTg5");});times--;}System.out.println("gson 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");}private static void gson2(List<String> json, int times) {long a = System.currentTimeMillis();while (times > 0) {json.forEach(s -> {Gson gson = new Gson();Map maps = gson.fromJson(s, Map.class);maps.get("xxuEeTg5");});times--;}System.out.println("gson2 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");}

测试结果:

测试处理130w的json字符串转Java的map。

发现,果然如传说的那样,fastjson就是快。

使用的fastjson的版本是1.2.56,差不多最新的了

我代码里面带2的方法,是同一个jar可能有不同的实现方式,想看看这个不同实现方式是否会影响效率,测试完之后,发现这个变化对结果的影响几乎没有。

但是,这个json转map还是慢呀。。。。

fastjson-常见的问题--官方回复--github网址,中文的。

我这个需求是要处理大量的json字符串,不是说全部合并成一个超大的字符串,是n多个小的字符串,要把这b多的碎片的(每个100个k v 的json)json字符串,转成map处理。

注意,我这个测试的使用常见。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。