Java中如何解析JSON 掌握三種JSON處理庫的用法

Java中解析json主要通過gson、jackson和fastjson三個庫實現,各有適用場景。1.gson由google開發,使用簡單但性能略低,適合對易用性要求高的項目;2.jackson以高性能和強大功能著稱,適合處理復雜json結構,但配置較復雜;3.fastjson是阿里巴巴開源的高性能庫,適合對性能敏感的場景,但需注意安全性問題。選擇時應根據項目需求權衡易用性、性能與安全。

Java中如何解析JSON 掌握三種JSON處理庫的用法

Java中解析JSON,簡單來說,就是把JSON字符串變成Java對象,或者反過來。這事兒現在有很多工具可以幫忙,用起來也挺方便的。

Java中如何解析JSON 掌握三種JSON處理庫的用法

解決方案

Java中如何解析JSON 掌握三種JSON處理庫的用法

Java解析JSON主要依賴于各種json處理庫。目前比較流行的有Gson、Jackson和fastjson。它們各有特點,可以根據項目的具體需求選擇合適的庫。

立即學習Java免費學習筆記(深入)”;

Java中如何解析JSON 掌握三種JSON處理庫的用法

Gson

Gson是Google提供的JSON處理庫,使用簡單,API友好。

用法示例:

  1. 引入Gson庫:

    <dependency>     <groupId>com.google.code.gson</groupId>     <artifactId>gson</artifactId>     <version>2.8.9</version> </dependency>
  2. 解析JSON字符串為Java對象:

    import com.google.gson.Gson;  public class Main {     public static void main(String[] args) {         String jsonString = "{"name":"張三","age":30}";         Gson gson = new Gson();         Person person = gson.fromJson(jsonString, Person.class);         System.out.println(person.getName()); // 輸出: 張三         System.out.println(person.getAge());  // 輸出: 30     } }  class Person {     private String name;     private int age;      public String getName() {         return name;     }      public int getAge() {         return age;     } }
  3. 將Java對象轉換為JSON字符串:

    import com.google.gson.Gson;  public class Main {     public static void main(String[] args) {         Person person = new Person();         person.setName("李四");         person.setAge(25);          Gson gson = new Gson();         String jsonString = gson.toJson(person);         System.out.println(jsonString); // 輸出: {"name":"李四","age":25}     } }  class Person {     private String name;     private int age;      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;     } }

Gson的優點在于使用簡單,不需要復雜的配置,可以很好地處理復雜的Java對象。缺點是性能相對Jackson和fastjson略遜一籌。

Jackson

Jackson是另一款流行的JSON處理庫,以其高性能和豐富的功能而聞名。

用法示例:

  1. 引入Jackson庫:

    <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-databind</artifactId>     <version>2.13.0</version> </dependency>
  2. 解析JSON字符串為Java對象:

    import com.fasterxml.jackson.databind.ObjectMapper;  public class Main {     public static void main(String[] args) throws Exception {         String jsonString = "{"name":"王五","age":40}";         ObjectMapper mapper = new ObjectMapper();         Person person = mapper.readValue(jsonString, Person.class);         System.out.println(person.getName()); // 輸出: 王五         System.out.println(person.getAge());  // 輸出: 40     } }  class Person {     private String name;     private int age;      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;     } }
  3. 將Java對象轉換為JSON字符串:

    import com.fasterxml.jackson.databind.ObjectMapper;  public class Main {     public static void main(String[] args) throws Exception {         Person person = new Person();         person.setName("趙六");         person.setAge(35);          ObjectMapper mapper = new ObjectMapper();         String jsonString = mapper.writeValueAsString(person);         System.out.println(jsonString); // 輸出: {"name":"趙六","age":35}     } }  class Person {     private String name;     private int age;      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;     } }

Jackson的優點是性能好,功能強大,可以處理各種復雜的JSON結構。缺點是配置相對復雜,上手難度稍高。

fastjson

fastjson是阿里巴巴開源的JSON處理庫,以其極高的性能而著稱。

用法示例:

  1. 引入fastjson庫:

    <dependency>     <groupId>com.alibaba</groupId>     <artifactId>fastjson</artifactId>     <version>1.2.79</version> </dependency>
  2. 解析JSON字符串為Java對象:

    import com.alibaba.fastjson.JSON;  public class Main {     public static void main(String[] args) {         String jsonString = "{"name":"錢七","age":28}";         Person person = JSON.parseObject(jsonString, Person.class);         System.out.println(person.getName()); // 輸出: 錢七         System.out.println(person.getAge());  // 輸出: 28     } }  class Person {     private String name;     private int age;      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;     } }
  3. 將Java對象轉換為JSON字符串:

    import com.alibaba.fastjson.JSON;  public class Main {     public static void main(String[] args) {         Person person = new Person();         person.setName("孫八");         person.setAge(42);          String jsonString = JSON.toJSONString(person);         System.out.println(jsonString); // 輸出: {"age":42,"name":"孫八"}     } }  class Person {     private String name;     private int age;      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;     } }

fastjson的優點是性能極高,適合對性能有較高要求的場景。缺點是安全性方面存在一些問題,需要注意版本選擇和安全配置。

如何選擇合適的JSON處理庫?

選擇哪個庫,其實取決于你的項目需求。如果追求簡單易用,Gson是不錯的選擇;如果對性能有較高要求,Jackson或fastjson更適合;如果特別看重性能,并且對安全性有足夠的了解和配置能力,fastjson可能更優。

JSON解析時遇到字段缺失或類型不匹配怎么辦?

JSON數據結構變化是常有的事。處理字段缺失,可以在Java類中使用@JsonProperty注解,并設置required = false,或者在讀取時進行判空處理。類型不匹配,可以考慮使用自定義的類型轉換器,或者在Java類中定義合適的類型,并使用注解進行映射。例如,Jackson可以使用@JsonDeserialize注解指定自定義的反序列化器。

如何處理復雜的JSON嵌套結構?

復雜的JSON嵌套結構,通常意味著你需要定義更復雜的Java類結構來與之對應。可以采用遞歸的方式,逐層解析JSON對象和數組。也可以使用JSONPath表達式,方便地訪問JSON結構中的特定元素。各個庫都提供了相應的API來支持JSONPath。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享