@JsonSerialize java对象和json的相互转换--(1) 使用@JsonSerialize对javabean进行json格式化

在需要序列化为json输出的类上增加@JsonSerialize.

java对象和json的相互转换--(1) 使用@JsonSerialize对javabean进行json格式化

以json格式输出数据是常用的方式,这次记录下项目中使用的json格式化方法,

使用的jar包为com.fasterxml.jackson.core:jackson-databind,对应的maven依赖为      

 <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.2</version>

        </dependency>

1 首先定义一个Student类

[java] view plain copy
  1. <span style="font-family:'Times New Roman';font-size:14px;">public class Student {  
  2.     private String name;  
  3.     private int age;  
  4.     private int number;  
  5.   
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.   
  10.     public int getAge() {  
  11.         return age;  
  12.     }  
  13.   
  14.     public int getNumber() {  
  15.         return number;  
  16.     }  
  17.   
  18.     public Student(String name, int age, int number) {  
  19.   
  20.         this.name = name;  
  21.         this.age = age;  
  22.         this.number = number;  
  23.     }  
  24. }</span>  

2 定义一个要格式化的类 StudentsReport,使用@JsonSerialize进行格式化,对应的格式化类为 StudentsReportSerializer
[java] view plain copy
  1. <span style="font-family:'Times New Roman';font-size:14px;">import com.fasterxml.jackson.databind.annotation.JsonSerialize;  
  2.   
  3.   
  4. import java.util.List;  
  5.   
  6. import static com.google.common.collect.Lists.newArrayList;  
  7.   
  8. @JsonSerialize(using = StudentsReportSerializer.class)  
  9. public class StudentsReport {  
  10.     List<String> names = newArrayList();  
  11.     List<Student> studentList = newArrayList();  
  12.   
  13.     public List<String> getNames() {  
  14.         return names;  
  15.     }  
  16.   
  17.     public List<Student> getStudentList() {  
  18.         return studentList;  
  19.     }  
  20.   
  21.     public StudentsReport(List<String> names, List<Student> studentList) {  
  22.   
  23.         this.names = names;  
  24.         this.studentList = studentList;  
  25.     }  
  26. }</span>  


3  对应的格式化的类为
[java] view plain copy
  1. <span style="font-family:'Times New Roman';font-size:14px;">import com.fasterxml.jackson.core.JsonGenerator;  
  2. import com.fasterxml.jackson.core.JsonProcessingException;  
  3. import com.fasterxml.jackson.databind.JsonSerializer;  
  4. import com.fasterxml.jackson.databind.SerializerProvider;  
  5.   
  6. import java.io.IOException;  
  7.   
  8. public class StudentsReportSerializer extends JsonSerializer <StudentsReport>{  
  9. @Override  
  10.     public void serialize(StudentsReport studentsReport, JsonGenerator jgen, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {  
  11.         jgen.writeStartObject(); <span style="color:#33cc00;">//start write :"{"</span>  
  12.   
  13.         jgen.writeFieldName("studentsName");  
  14.         jgen.writeStartArray();<span style="color:#33cc00;">// write "["</span>  
  15.         for (String name:studentsReport.getNames()  
  16.              ) {  
  17.             jgen.writeObject(name);  
  18.         }  
  19.         jgen.writeEndArray();  
  20.   
  21.   
  22.         jgen.writeFieldName("studentsData");  
  23.         jgen.writeStartArray();  
  24.         for (Student student : studentsReport.getStudentList()){  
  25.             jgen.writeStartObject();  
  26.   
  27.             jgen.writeStringField("name",student.getName());  
  28.             jgen.writeNumberField("age",16);  
  29.             jgen.writeNumberField("number",1);  
  30.   
  31.             jgen.writeEndObject();  
  32.         }  
  33.         jgen.writeEndArray();  
  34.   
  35.         jgen.writeEndObject();  <span style="color:#33cc00;">//end :"}"</span>  
  36.     }  
  37.   
  38. }</span>  
 4 进行测试
[java] view plain copy
  1. <span style="font-family:'Times New Roman';font-size:14px;">import com.fasterxml.jackson.core.JsonProcessingException;  
  2. import com.fasterxml.jackson.databind.ObjectMapper;  
  3.   
  4. import java.util.List;  
  5.   
  6. import static com.google.common.collect.Lists.newArrayList;  
  7.   
  8. public class TestJson {  
  9.     public static void main(String[] args) throws JsonProcessingException {  
  10.         Student student1 = new Student("Tom",16,1);  
  11.         Student student2 = new Student("Jerry",17,2);  
  12.         List<Student> studentList = newArrayList();  
  13.         studentList.add(student1);  
  14.         studentList.add(student2);  
  15.   
  16.         List<String> studentsName = newArrayList(student1.getName(),student2.getName());  
  17.   
  18.   
  19.   
  20.         StudentsReport report = new StudentsReport(studentsName,studentList);  
  21.   
  22.         ObjectMapper mapper = new ObjectMapper();  
  23.   
  24.         String jsonReport = mapper.writeValueAsString(report);  
  25.   
  26.         System.out.println(jsonReport);  
  27.   
  28.     }  
  29. }</span>  

输出结果为   {"studentsName":["Tom","Jerry"],"studentsData":[{"name":"Tom","age":16,"number":1},{"name":"Jerry","age":16,"number":1}]}

即 :{
    "studentsName":[
        "Tom",
        "Jerry"
    ]
,
    "studentsData":[
        {
            "name":"Tom",
            "age":16,
            "number":1
        }
,
        {
            "name":"Jerry",
            "age":16,
            "number":1
        }

    ]

}

ps:使用的newArrayList()是使用了com.google.guava这个包,对应的maven依赖为

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>12.0.1</version>
        </dependency>



猜你喜欢

转载自blog.csdn.net/TuxedoLinux/article/details/80782879