知識追尋者之前使用的是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"]}
