最近在開發Android應用的時候,遇到了一個問題:使用Gson庫將Java對象轉換為JSON字符串時,發現有些類變量卻沒有被轉換為JSON格式。經過調試排查,終于找到了原因。
Gson gson = new Gson(); Person person = new Person("Tom", 18); String json = gson.toJson(person); System.out.println(json); //輸出結果:{"name":"Tom"}
以上代碼中,Person類中有兩個屬性:name和age。但是轉換成JSON字符串時,只有name被轉換了,age沒有被轉換。這是為什么呢?
原來,轉換成JSON字符串時,Gson庫默認會將所有的類變量轉換成JSON格式,除非該變量的值為null。因此,若想將一個非null的類變量排除在轉換之外,需要使用@Expose注解。例如:
public class Person { @Expose private String name; //使用了@Expose注解 private int age; public Person(String name, int age) { this.name = name; this.age = age; } //省略getter和setter方法 } Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); Person person = new Person("Tom", 18); String json = gson.toJson(person); System.out.println(json); //輸出結果:{"name":"Tom"}
添加@Expose注解后,需要在Gson對象中設置排除所有沒有使用@Expose注解的屬性,即excludeFieldsWithoutExposeAnnotation()方法。
總結:
- Gson默認將所有的類變量轉換成JSON格式,除非該變量的值為null。
- 若想將一個非null的類變量排除在轉換之外,需要使用@Expose注解,并在Gson對象中設置排除所有沒有使用@Expose注解的屬性。
上一篇gson泛型轉json
下一篇vue 3 router