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处理。

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

Java中,可以使用一些库来实现JSON字符串换为Map对象的功能。其中,常用的库包括JacksonGsonFastjson等。 使用Jackson库实现JSON换为Map对象的代码如下: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class JsonToMapExample { public static void main(String[] args) throws Exception { String json = "{\"pageSize\": 100, \"page\": 1, \"sn\": 1119785570}"; ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {}); System.out.println(map); } } ``` 使用Gson库实现JSON换为Map对象的代码如下: ```java import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class JsonToMapExample { public static void main(String[] args) { String json = "{\"pageSize\": 100, \"page\": 1, \"sn\": 1119785570}"; Gson gson = new Gson(); Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>() {}.getType()); System.out.println(map); } } ``` 使用Fastjson库实现JSON换为Map对象的代码如下: ```java import com.alibaba.fastjson.JSON; public class JsonToMapExample { public static void main(String[] args) { String json = "{\"pageSize\": 100, \"page\": 1, \"sn\": 1119785570}"; Map<String, Object> map = JSON.parseObject(json, new TypeReference<Map<String, Object>>() {}); System.out.println(map); } } ``` 这些代码示例分别使用JacksonGsonFastjson库将JSON字符串换为Map对象,并打印输出结果。你可以根据自己的需求选择其中的一种库来实现JSON换为Map对象的功能。1 #### 引用[.reference_title] - *1* [Java基础——Json字符串与Map](https://blog.csdn.net/qq_34869143/article/details/79486342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值