JSON數據處理


CRUD崽怎么了?

精通CRUD還怕找不到工作嘛?

giao,最近跟其他項目對接老是要用json,什么解析json字符串,什么對象轉json格式字符串,聽着阿夜我真是頭禿。

說起Java操作json,第一個映入我眼眶的不是阿里爸爸的fastjson,而是json-lib。接觸這個是去年剛進公司時從前輩遺留的代碼中看到的(失誤失誤前輩健在,只是頭發快沒了,說起這個話我不由得摸了摸頭皮)。

當時覺得真好用吶,它的maven配置是這樣的:

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

操作數據是這樣的:

    public static void main(String[] args) {
        String jsonStr = "{\"id\":1,\"name\":\"eknown\"}";

        // json字符串轉json對象
        JSONObject obj = JSONObject.fromObject(jsonStr);
        // 操作json對象
        System.out.println(obj.get("id"));
        obj.element("roleList", "[1,2,3]");
        // json對象轉json字符串
        System.out.println(obj.toString());
    }

但是今天查閱資料的時候發現有文章提到json-lib有這樣一個問題:在json字符串數據較大時,由於json-lib會對當前解析位置到字符串末尾進行substring操作,在JDK1.7以上的環境中,會進行大量的字符串復制操作,導致大量的CPU和內存消耗,嚴重的甚至會Full GC。

嚇得夜仔我當場差點休克——我負責的三個已上線的項目,都使用了json-lib來解析字符串,甚至,在某個接口中,進行了非常多的json解析操作。ヽ(*。>Д<)o゜

以后還是改用更快更省內存的json庫吧,比如fastjson,聽這名字就很快吶!

Giao,但是fastjson前陣子不是爆出一堆嚴重漏洞嘛?

原諒夜仔我久居深山老林、每日CRUD,不問外間事。

幸好幸好,那幫猿已經緊急修復了漏洞了,只要將版本升級到1.2.60及以上就可以啦!

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

這里給出一個簡單的示例,畢竟夜我這帥都是每天枸杞泡茶保養的效果啦,不能熬夜哦。

package jsonparse;

import com.alibaba.fastjson.JSONObject;

/**
 * @author zhangfanghao
 * @version 1.0
 * @date 2019-12-17 20:04
 */
public class FastJsonParseDemo {

    public static void main(String[] args) {
        String jsonStr = "{\"id\":1,\"name\":\"eknown\"}";

        // json字符串轉json對象
        JSONObject obj = JSONObject.parseObject(jsonStr);
        // 操作json對象
        System.out.println(obj.get("id"));
        obj.put("roleList", "[1,2,3]");
        // json對象轉json字符串
        System.out.println(obj.toString());
        // json對象轉Java對象
        User user = obj.toJavaObject(User.class);
        System.out.println(user);
    }
}

class User {
    private Integer id;
    private String name;
    private Object roleList;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", roleList=" + roleList +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Object getRoleList() {
        return roleList;
    }

    public void setRoleList(Object roleList) {
        this.roleList = roleList;
    }
}


推薦閱讀Java3y的這篇文章:https://juejin.im/post/5df2ecdaf265da33c7550328,里面講得很好啦。

其實還有很多也很好用的json庫呀,比如谷歌的Gson,又或者JSON In Java。

可惜,這些妖艷貨暫時還不入不了夜的眼,等我有空再關門研究一下😎

如對文章有任何疑問,請聯系我——個人微信:guanlanju6688


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM