一、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。兼顧性能和準確性。
四、參考