在沒有學習fastjson前,不知道JSON和GSON的區別。
JSON來源:在JAVA中,我們的對象攜帶了數據,如果要把對象中的數據傳輸給前端,可以使用XML文件,但是XML文件煩瑣而且速度慢,JSON可以完美取代XML文件。JSON是JAVAScript的子集,使用JSON自然更加快。
JSON本質:JSON本質是一種文本格式。可以理解成前后端傳輸數據的協議。
JSON文本組成:"{}" "[]" "," ":"一共六個字符,可以包括空格、回車。{}表示對象,[]表示對象組成的數組,","用來分隔對象,":"用來分隔鍵值對。
GSON:和JSON一字之差,但是概念完全不同。GSON全名為Goole JSON,使用JAVA編寫的代碼,功能是將JAVA對象轉換成JSON格式文本(序列化)和將JSON格式文本轉換成JAVA對象(反序列化)。一個功能可能有不同的代碼產品,alibaba的fastjson和json就是同類競品,fastjson據說要比GSON快6倍。
根據后端語言的使用,我們可以使用不同語言對應功能,比如將JSON格式文本轉換成PHP對象,或者轉換成其他語言對象。
來個fastjson的使用案例:
首先我們下載相應的jar包並配置classpath,然后我們新建bean
public class Group {
private Long id;
private String name;
private List<User> users = new ArrayList<User>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public void addUser(User user) {
users.add(user);
}
@Override
public String toString() {
return "Group{" +
"id=" + id +
", name='" + name + '\'' +
", users=" + users +
'}';
}
}
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
來個測試
public class Test {
public static void main(String[] args) {
//序列化
Group group = new Group();
group.setId(0L);
group.setName("admin");
User guestUser = new User();
guestUser.setId(2L);
guestUser.setName("guest");
User rootUser = new User();
rootUser.setId(3L);
rootUser.setName("root");
group.addUser(guestUser);
group.addUser(rootUser);
String jsonString = JSON.toJSONString(group);
System.out.println(jsonString);
//反序列化
//"{}"表示對象,"[]"表示對象數組(List),一定要有getter和setter。
String jsonString1 = "{\"id\":0,\"name\":\"admin\",\"users\":[{\"id\":2,\"name\":\"guest\"},{\"id\":3,\"name\":\"root\"}]}";
Group group1 = JSON.parseObject(jsonString1, Group.class);
System.out.println(group1.getUsers().get(0).toString());
System.out.println(group1.toString());
//處理時間
Date date = new Date(System.currentTimeMillis());
System.out.println(JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(JSON.toJSONString(date, SerializerFeature.UseISO8601DateFormat));
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
System.out.println(JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat));
}
}
注意:在序列化中,我們的bean屬性只能是String、數值類型、List數組,數值最好設置為long,不容易溢出。我們必須設置getter和setter,如果屬性中有數組,還要有一個數組添加元素的方法,而且List必須實例化。在反序列化中,JSON格式的字符串中的鍵必須和對象的屬性相同,否則對象屬性將被賦值為空,數組屬性為[]。
在JAVA中,"使用\轉義。
