Gson和Fastjson區別以及使用推薦

一、Gson和Fastjson的區別

      Gson是目前功能最強的Json解析神器, 可以通過toJson與fromJson兩個轉換函數兩個函數進行對象的序列號和反序列化,可以對複雜類型的bean到json之間,進行轉換,精確度無與倫比。同時,是無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
FastJson是阿里用Java語言編寫的高性能的JSON處理器,在複雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,導致Json轉換出錯,需要制定引用。Gson的優勢是轉換複雜對象,性能消耗比FastJson大;而FastJson優勢是解析轉換複雜對象的速度最快,但是對一些複雜轉換就會出現問題。

      在開發中,如果性能滿足的情況下,推薦使用Gson。因爲親遇到,對於複雜類型,比如原子類例如AtomicLong屬性,fastjson會按照基本類型解析,而不是對象。這樣會導致反序列化的時候數據不完整,所以,強烈建議Gson。

二、Gson

1.簡介

Gson是目前功能最全的Json解析神器,Gson的應用主要爲toJson與fromJson兩個轉換函數,Gson可以將複雜類型的json完美轉換到bean,以及bean完美到json的轉換。性能上,比Fastjson略差,但是性能上無要求的化,極度推薦使用Gson解析的神器。

2.添加依賴

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

3.測試對象User類

package json;


public class User {

    private String name;
    private int age;
    private String sex;

    public User() {
    }

    public User(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

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

4. bean和json相互轉換,以及複雜類型轉換

package json;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.List;
import java.util.Set;


public class jsonTest {


    public static void main(String[] args) {

        //創建一個對象
        User user1 = new User("sdf", 3, "男");

        System.out.println("==============Gson : Bean to Json===============");
        Gson gson = new Gson();
        String jsonUser1 = gson.toJson(user1);
        System.out.println(jsonUser1);

        System.out.println("==============Gson : Json to Bean===============");
        User user1FromJson = gson.fromJson(jsonUser1, json.User.class);
        System.out.println(user1FromJson);

        System.out.println("==============Gson : json轉換複雜的bean===============");
        // 將json轉換成複雜類型的bean,需要使用TypeToken
        String json = "[{\"id\":\"1\",\"name\":\"Json技術\"},{\"id\":\"2\",\"name\":\"java技術\"}]";
        // 將json轉換成List
        List list = gson.fromJson(json, new TypeToken<List>() {
        }.getType());
        // 將json轉換成Set
        Set set = gson.fromJson(json, new TypeToken<Set>() {
        }.getType());



    }
}

三、Fastjson

1.介紹

        Fastjson由阿里使用Java開發的高性能的JSON處理器,其處理複雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型無法解析,導致Json轉換出錯,需要制定引用。
        但是,FastJson採用獨創的算法,將parse的速度提升到極致,超過所有json庫。

2.依賴

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


3.bean和json的相互轉換

package json;

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.List;
import java.util.Set;


public class FastjsonTest {


    public static void main(String[] args) {

        //創建一個對象
        User user1 = new User("sdf", 3, "男");



        System.out.println("==============Fastjson : Bean to Json===============");
        // 將對象轉換成格式化的json
        String userJson1=  JSON.toJSONString(user1, true);
        // 將對象轉換成非格式化的json
        String userJson2= JSON.toJSONString(user1, false);

        System.out.println("==============Fastjson : Json to Bean===============");
        User user2 = JSON.parseObject(userJson1, User.class);


    }
}


三、如何選擇

1. 沒有性能要求,可以使用google的Gson,因爲性能太強大。
2. 如果希望提升性能,則兩個可以一起使用,即使用Gson將bean轉換json確保數據的正確,使用FastJson將Json轉換Bean。兼顧性能和準確性。

四、參考

1.Gson 與 FastJson 對比


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章