FastJson和Gson在將json字串轉為複雜物件的一些區別
阿新 • • 發佈:2020-12-10
下文如果錯誤請批評指出。
1、maven依賴
- FastJson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
- Gson
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>
2、轉換方法
- FastJson
public static void main(String[] args) {
String response="";
T fastjsonRresult = JSON.parseObject(response, new TypeReference<T>(){});
}
- Gson
public static void main(String[] args) { String response=""; Gson gson = new Gson(); T gsonResult = gson.fromJson(response, new TypeToken<T>(){}.getType()); }
3、所轉換物件的構造方法
- FastJson將json字串轉為物件時,依賴物件的構造方法和get/set方法,所以在使用FastJson時,如果物件添加了自定義構造,記得加上無參和全參構造(使用lombok註解除了新增@Data,順便加上@AllArgsConstructor和@NoArgsConstructor)。
- Gson將json字串轉為物件時,即使物件沒有對應構造方法和get/set方法,也能按照屬性的名字進行解析。
4、屬性欄位大小寫
- FastJson在反序列化的時候,是對大小寫不敏感的(例如,“DaTa”對應的值可以解析到data欄位),而在序列化的時候,則預設又是會將首字母置為小寫(例如,會把Data欄位轉為“data”,可使用@JSONField(name = "Data")來指定轉為“Data”)。
- Gson無論是序列化還是反序列化,完全對欄位名大小寫敏感的。
5、巢狀帶泛型物件的型別
- FastJson解析物件時,不指定泛型,則泛型型別為JsonObject。
- Gson解析物件時,不指定泛型,則泛型型別為LinkedTreeMap(Gson包裡的),不可強轉為JsonObject,也沒有toJsonString方法(需要注意的地方就是,指定的泛型物件中包含的物件又有泛型的話,由於沒辦法在解析時指定,在取物件強轉時需注意型別)。