一、作用
Gson 是 Java 序列化/反序列化库,用于将 Java 对象转换为 JSON 并返回。
二、Java Gson Maven 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
三、Java Gson 特性
用于 Java 对象 JSON 序列化和反序列化的简单工具。
Java 泛型的广泛支持。
对象的自定义表示。
支持任意复杂的对象。
快速,低内存占用。
允许紧凑的输出和漂亮的打印。
四、测试
1、创建GSON的两种方式
Gson gson = new Gson();
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DOTS)
.serializeNulls()
.create();
描述 | 方法 | 示例 |
---|---|---|
美观输出,即格式化之后的json,默认false | setPrettyPrinting() | |
设置序列化null值,不加此参数null不会显示 | serializeNulls() | |
创建 | create() | |
格式json的key | setFieldNamingPolicy | |
key和实体字段名称一致,包括大小写; | FieldNamingPolicy.IDENTITY | studentName—>studentName |
单词用下划线分隔,全小写; | FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES | studentName—>student_name |
首字母大写; | FieldNamingPolicy.UPPER_CAMEL_CASE | studentName—>StudentName |
单词用空格分隔,单词首字母大写; | FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES | studentName—>Student Name |
单词用“-”分隔,全小写; | FieldNamingPolicy.LOWER_CASE_WITH_DASHES | studentName—>student-name |
单词用“.”分隔,全小写; | FieldNamingPolicy.LOWER_CASE_WITH_DOTS | studentName—>student.name |
2、对象或集合转json
// 对象转json
Student student = new Student();
student.setStudentName("张三");
student.setStudentAge(25);
student.setStudentSex("男");
student.setStudentIdCard("123456789");
student.setStudentAddress(null);
String json = gson.toJson(student);
System.out.println("对象转json:" + json);
// 集合转json
List<Student> studentList = new ArrayList<>();
for (int i = 1; i <= 1; i++) {
Student student = new Student();
student.setStudentName("张三");
student.setStudentAge(25);
student.setStudentSex("男");
student.setStudentIdCard("123456789");
student.setStudentAddress(null);
studentList.add(student);
}
String jsonList = gson.toJson(studentList);
System.out.println("集合转json:" + jsonList);
3、json转对象或转集合
// json转对象
Student student = gson.fromJson(json, Student.class);
System.out.println("json转对象:" + student);
// json转对象集合
List<Student> student = gson.fromJson(jsonList, new TypeToken<List<Student>>() {
}.getType());
System.out.println("json转集合:" + student.toString());
4、字段匹配
在某些情况下json字段和实体字段不一致,可以使用注解解决
/**
* value:序列化或反序列化时字段的所需名称。
* alternate:反序列化时字段的替代名称。除了'value'属性之外,它还提供了更多可能的名称。如果有多个字段与一个属性匹配,Gson将使用最后处理的字段。
*/
@SerializedName(value = "name", alternate = {"aaa"})
private String studentName;
五、判断jSON字符长是对象还是集合
String jsonStr = "json字符串";
Object json = new JSONTokener(jsonStr).nextValue();
if(json instanceof JSONObject){
JSONObject jsonObject = (JSONObject)json;
} else if (json instanceof JSONArray){
JSONArray jsonArray = (JSONArray)json;
}
学习记录