四种常见json效率比较

因工作需要,在项目中想统一使用同一种json进行解析数据,因此将几种json拿出来比较比较。


第一种  org.json

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

第二种  net.sf.json

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

第三种  com.alibaba.fastjson

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

第四种  com.google.code.gson

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

实验代码:

public static void main(String args[]){
    int data = 1000;
    System.out.println("data:"+data);
    Long t1 = System.currentTimeMillis();
    org.json.JSONObject jsonObject1 = new org.json.JSONObject();
    for (int i = 0; i < data; i++) {
        jsonObject1.put("k" + i, "v" + i);
    }
    Long t2 = System.currentTimeMillis();
    System.out.println("org.json:" + (t2 - t1));

    Long t3 = System.currentTimeMillis();
    net.sf.json.JSONObject jsonObject2 = new net.sf.json.JSONObject();
    for (int i = 0; i < data; i++) {
        jsonObject2.put("k" + i, "v" + i);
    }
    Long t4 = System.currentTimeMillis();
    System.out.println("net.sf.json:" + (t4 - t3));

    Long t5 = System.currentTimeMillis();
    com.alibaba.fastjson.JSONObject jsonObject3 = new com.alibaba.fastjson.JSONObject();
    for (int i = 0; i < data; i++) {
        jsonObject3.put("k" + i, "v" + i);
    }
    Long t6 = System.currentTimeMillis();
    System.out.println("com.alibaba.fastjson:" + (t6 - t5));

    Long t7 = System.currentTimeMillis();
    com.google.gson.JsonObject jsonObject4 = new com.google.gson.JsonObject();
    for (int i = 0; i < data; i++) {
        jsonObject4.addProperty("k" + i, "v" + i);
    }
    Long t8 = System.currentTimeMillis();
    System.out.println("com.google.gson:" + (t8 - t7));
}

实验结果如下:

data = 1000;


data = 10000;


data = 100000;


data = 1000000;



实验结果:从效率上来讲,当数据量较小时,org.json  处理速度最快,当数据量较大时,com.alibaba.fastjson处理速度最快。

源码分析:

org.json

public JSONObject put(String key, Object value) throws JSONException {
    if(key == null) {
        throw new NullPointerException("Null key.");
    } else {
        if(value != null) {
            testValidity(value);
            this.map.put(key, value);
        } else {
            this.remove(key);
        }

        return this;
    }
}

com.alibaba.fastjson

public Object put(String key, Object value) {
    return this.map.put(key, value);
}
对比源码,显而易见org.json 的 JSONObject 的put()方法,不允许key和value为null,而阿里的fastjson是允许的。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HashMap是Java中常用的数据结构之一,它提供了快速的插入、删除和查找操作。然而,HashMap在遍历顺序上是不可预测的,这是因为它使用散列算法来存储键值对。而LinkedHashMap是HashMap的子类,它在HashMap的基础上保留了插入顺序,即它会按照元素的插入顺序来进行遍历。 当需要按照插入顺序对键值对进行遍历或者需要保留插入顺序时,LinkedHashMap是更好的选择。对于较小的数据集来说,HashMap和LinkedHashMap的性能差距并不明显,但是对于大规模数据集,LinkedHashMap的性能略低于HashMap。 讨论Json效率时,主要是指从HashMap或LinkedHashMap生成Json字符串以及解析Json字符串为HashMap或LinkedHashMap的性能。Json序列化和反序列化是常见的数据交换格式,因此对性能有一定的要求。 在HashMap和LinkedHashMap中,HashMap的序列化和反序列化的性能更高,因为LinkedHashMap需要额外的插入顺序维护。对于Json字符串的生成,两者性能相当,因为在序列化过程中,它们都需要依次遍历HashMap或LinkedHashMap的键值对。 相反地,在将Json字符串解析为HashMap或LinkedHashMap时,LinkedHashMap的性能略低于HashMap,因为LinkedHashMap需要按照插入顺序进行重建。 综上所述,HashMap在处理大数据集和需要高性能的场景中更具优势,而LinkedHashMap适用于需要保留插入顺序的场景。在Json序列化和反序列化方面,LinkedHashMap的性能稍逊于HashMap。但在实际应用中,如果性能差距不是关键因素,优先选择LinkedHashMap可以更好地满足需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值