JSON解析器之Gson、FastJson、Jackson

LG小飛俠發表於2020-11-26

Java物件與JSON相互轉換

JSON解析器:
常見的解析器:Jsonlib,Gson,fastjson,jackson

1.Gson解析器(谷歌)

最好使用最新jar包(百度搜尋Gson然後去GitHub上找,或者Maven上也有)

1. JSON轉為Java物件

  • 1.引入JAR包
  • 2.在需要轉換Java物件的位置, 編寫如下程式碼:
    • 物件 = new Gson().fromJson(JSON字串,物件型別.class);

建立一個Student類:

public class Student {
    private int id;
    private String name;
    private int age;

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 static void main(String[] args) {
        //1. 建立Gson物件
        Gson g = new Gson();
        //2. 轉換
        String str = "{\"id\":1,\"name\":\"馬保國\",\"age\":56}\n";
        Student student = g.fromJson(str, Student.class);
        System.out.println(student);
        System.out.println("---------------------------");
        //3.集合轉換
        String str2 = "{\"id\":1,\"name\":\"馬保國\",\"age\":56,\"page\":[\"hello\",\"java\",\"hahaha\"]}\n";
        HashMap data = g.fromJson(str2, HashMap.class);
        List page = (List) data.get("page");//JSON中的陣列轉出來是ArrayList
        System.out.println(page.get(1));
    }

執行結果:

Student{id=1, name='馬保國', age=56}
----------------------------------
java

2.Java物件轉換JSON

  • 1.引入JAR包

  • 2.在需要轉換JSON字串的位置編寫如下程式碼即可:

    • String json = new Gson().toJSON(要轉換的物件);

例項:

public static void main(String[] args) {
        //1. 建立Gson物件
        Gson g = new Gson();
        //2. 轉換
        Student student1 = new Student(1,"馬保國",56);
        String str = g.toJson(student1);
        System.out.println(str);
        System.out.println("--------------------------------------------");
        //3. 多個物件轉換
        Student student2 = new Student(2,"盧本偉",28);
        Student student3 = new Student(3,"蔡徐坤",15);
        ArrayList<Student> students = new ArrayList<>();
        students.add(student1);
        students.add(student2);
        students.add(student3);
        String str2 = g.toJson(students);
        System.out.println(str2);
    }

執行結果:

{"id":1,"name":"馬保國","age":56}
--------------------------------------------
[{"id":1,"name":"馬保國","age":56},{"id":2,"name":"盧本偉","age":28},{"id":3,"name":"蔡徐坤","age":15}]

2. FastJson解析器(阿里)

最好使用最新jar包(百度搜尋Gson然後去GitHub上找,或者Maven上也有)
1. JSON轉為Java物件

  • 1.引入JAR包
  • 2.在需要轉換Java物件的位置, 編寫如下程式碼:
    • 型別 物件名=JSON.parseObject(JSON字串, 型別.class);
    • 或List<型別> list=JSON.parseArray(JSON字串,型別.class);

例項:

public class Demo4 {
    public static void main(String[] args) {
        String str = "{\"id\":1,\"name\":\"馬保國\",\"age\":56}";
        Student student = JSON.parseObject(str, Student.class);
        System.out.println(student);
    }
}

執行截圖:

Student{id=1, name='馬保國', age=56}

2.Java物件轉換JSON

  • 引入JAR包
  • 在需要轉換JSON字串的位置編寫如下程式碼即可:
    • String json=JSON.toJSONString(要轉換的物件);

例項:

public static void main(String[] args) {
    Student student1 = new Student(1,"馬保國",56);
    String str = JSON.toJSONString(student1);
    System.out.println(str.length());
}

執行截圖:

{"id":1,"name":"馬保國","age":56}

注意:

FastJson是靠物件屬性的get、Set方法生成josn檔案的,沒有get、set方法無法生成

3. JackSon解析器

最好使用最新jar包(百度搜尋Gson然後去GitHub上找,或者Maven上也有)
1. JSON轉為Java物件

  • 1.匯入jackson的相關jar包

  • 2.建立Jackson核心物件 ObjectMapper

  • 3.呼叫ObjectMapper的相關方法進行轉換

    • readValue(json字串資料,Class)
      2. Java物件轉換JSON
      使用步驟:
  • 1.匯入jackson的相關jar包

  • 2.建立Jackson核心物件 ObjectMapper

  • 3.呼叫ObjectMapper的相關方法進行轉換

      1. 轉換方法:
        writeValue(引數1,obj):
        引數1:
        File:將obj物件轉換為JSON字串,並儲存到指定的檔案中
        Writer:將obj物件轉換為JSON字串,並將json資料填充到字元輸出流中
        OutputStream:將obj物件轉換為JSON字串,並將json資料填充到位元組輸出流中
        writeValueAsString(obj):將物件轉為json字串
      1. 註解:
        1. @JsonIgnore:排除屬性。
        2. @JsonFormat:屬性值得格式化
          @JsonFormat(pattern = “yyyy-MM-dd”)
      1. 複雜java物件轉換
        1. List:陣列
        2. Map:物件格式一致

相關文章