gson使用總結


知識追尋者之前使用的是fastjson,感覺gson不錯,抽空學了下!!

依賴

Gradle:

dependencies {
  implementation 'com.google.code.gson:gson:2.8.6'
}

Maven:

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.6</version>
</dependency>

github地址 :https://github.com/google/gson

序列化與反序列化

對象序列化

/**
     * @author lsc
     * <p>對象序列化 </p>
     */
    @Test
    public void test1(){
        User user = new User();
        user.setId("a1");
        user.setName("zszxz");
        user.setAge("16");
        Gson gson = new Gson();
        String userJson = gson.toJson(user);
        // {"id":"a1","name":"zszxz","age":"16"}
        System.out.println(userJson);
    }

結論; 將對象轉為json字符串;

對象反序列化

    /**
     * @author lsc
     * <p>對象反序列化 </p>
     */
    @Test
    public void test2(){
        String userStr =  "{\"id\":\"a1\",\"name\":\"zszxz\",\"age\":\"16\"}";
        Gson gson = new Gson();
        User user = gson.fromJson(userStr, User.class);
        // User(id=a1, name=zszxz, age=16)
        System.out.println(user);
    }

結論:將json字符串轉為對象;

數組序列化

   /**
     * @author lsc
     * <p>數組反序列 </p>
     */
    @Test
    public void test3(){
        String arrayStr = "[\"a\", \"b\", \"c\"]";
        Gson gson = new Gson();
        String[] abc = gson.fromJson(arrayStr, String[].class);
        Arrays.stream(abc).forEach(e -> {
            System.out.println(e);
        });
    }

輸出

a
b
c

結論: 字符串數組轉為數組對象;

數組反序列化

    /**
     * @author lsc
     * <p>數組反序列 </p>
     */
    @Test
    public void test4(){
        Gson gson = new Gson();
        String[] abc = {"a","b","c"};
        String json = gson.toJson(abc);
        // ["a","b","c"]
        System.out.println(json);
    }

結論 :將 字符串數組轉為 數組字符串;

TypeAdapter

將 json對象轉為對象

@Test
    public void test8() throws IOException {
        Gson gson = new Gson();
        TypeAdapter<User> typeAdapter = gson.getAdapter(User.class);
        String jsonStr =  "{\"id\":\"a1\",\"name\":\"zszxz\",\"age\":\"16\"}";
        User user = typeAdapter.fromJson(jsonStr);
        //User(id=a1, name=null, age=16)
        System.out.println(user);
    }

將對象序列化為對象字符串;

@Test
    public void test9() throws IOException {
        Gson gson = new Gson();
        TypeAdapter<User> typeAdapter = gson.getAdapter(User.class);
        User user = new User();
        user.setId("a1");
        user.setName("zszxz");
        user.setAge("16");
        String userStr = typeAdapter.toJson(user);
        //{"id":"a1","username":"zszxz","age":"16"}
        System.out.println(userStr);
    }

常用注解

@SerializedName 修改序列化名稱;

User對象將 name 序列名稱為 username;

/**
 * @author lsc
 * <p> </p>
 */
@Data
public class User {

    private String id;

    @SerializedName("username")
    private String name;

    private String age;
}

測試代碼

/**
     * @author lsc
     * <p>對象序列化 </p>
     */
    @Test
    public void test1(){
        User user = new User();
        user.setId("a1");
        user.setName("zszxz");
        user.setAge("16");
        Gson gson = new Gson();
        String userJson = gson.toJson(user);
        // {"id":"a1","username":"zszxz","age":"16"}
        System.out.println(userJson);
    }

結論 : 輸出的字符串,name 字段變為 username;

@Expose()注解

  • @Expose()注解 默認參與序列化和反序列化
  • @Expose(serialize = false, deserialize = false) 不參與序列化,也不參與反序列化
  • @Expose(serialize = false) 只參與反序列化
  • @Expose(deserialize = false) 只參與序列化

Json對象與Json數組

構建json對象

	@Test
    public void test5(){
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("name","知識追尋者");
        jsonObject.addProperty("age",18);
        // 構建json對象{"name":"知識追尋者","age":18}
        System.out.println("構建json對象" + jsonObject);
    }

構建json數組

    @Test
    public void test6() {
        JsonArray jsonArray = new JsonArray();
        jsonArray.add("a");
        jsonArray.add("b");
        jsonArray.add("c");
        jsonArray.add("d");
        // 構建json數組["a","b","c","d"]
        System.out.println("構建json數組" + jsonArray);
    }

Json對象中加入json數組

	@Test
    public void test7() {
        // json對象
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("name","知識追尋者");
        jsonObject.addProperty("age",18);
        // json數組
        JsonArray jsonArray = new JsonArray();
        jsonArray.add("a");
        jsonArray.add("b");
        jsonArray.add("c");
        jsonArray.add("d");
        // json對象中加入json數組
        jsonObject.add("abcd",jsonArray);
        System.out.println(jsonObject);
    }

輸出

{"name":"知識追尋者","age":18,"abcd":["a","b","c","d"]}

個人站點地址https://zszxz.com/index


免責聲明!

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



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