JSON和GSON


在沒有學習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中,"使用\轉義。


免責聲明!

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



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