一、java对象、List、Map序列化为Json格式字符串
@Test
//student对象转为json字符串
public void testObjectJson(){
Student student=new Student();
student.setId(1);
student.setName("张三");
//student对象转为json字符串
String json = JSON.toJSONString(student);
System.out.println(json);
//{"id":1,"name":"张三"}
}
@Test
//将list转为json字符串
public void studentList(){
Student student1=new Student();
student1.setId(1);
student1.setName("张三");
Student student2=new Student();
student2.setId(2);
student2.setName("李四");
List<Student> studentList = new ArrayList<Student>();
studentList.add(student1);
studentList.add(student2);
//将list转为json字符串
String jsonString = JSON.toJSONString(studentList);
System.out.println(jsonString);
//[{"id":1,"name":"张三"},{"id":2,"name":"李四"}]
}
@Test
//将Map转为Json格式字符串
public void studentMap(){
Student student3 = new Student();
student3.setId(3);
student3.setName("张三");
Student student4 = new Student();
student4.setId(4);
student4.setName("李四");
Map<String , Student> studentMap = new HashMap<String , Student>();
studentMap.put("student3" , student3);
studentMap.put("student4" , student4);
//将Map转为Json格式字符串
String studentMapToString = JSON.toJSONString(studentMap);
System.out.println(studentMapToString);
//{"student4":{"id":4,"name":"李四"},"student3":{"id":3,"name":"张三"}}
}
二、Json格式字符串反序列化为java对象,List , Map
@Test
//Json格式字符串反序列化回到list
public void testMapJson(){
String jsonList = "{\"student4\":{\"id\":4,\"name\":\"李四\"},\"student3\":{\"id\":3,\"name\":\"张三\"}}";
//传递json格式字符串,添加泛型转Map集合时会报错,不添加则转后的Map没有泛型,时不安全的
//fastJson没有直接转换Map的方法,调用parseObject,传递参数,new 一个TypeReference类型:在TypeReference类型中,转递转换后的Map集合
Map<String , Student> studentMaps = JSON.parseObject(jsonList , new TypeReference<Map<String ,Student>>(){});
for(String key : studentMaps.keySet()){
System.out.println(key + ":" + studentMaps.get(key));
}
}
@Test
//Json格式字符串反序列化回到list
public void testListJson(){
String jsonList = "[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]";
//传递json格式字符串,传递转换后的集合的泛型的class的对象
List<Student> studentLists = JSON.parseArray(jsonList , Student.class);
for (Student studentList : studentLists){
System.out.println(studentList);
}
}
@Test
//Json格式字符串反序列化回到java对象
public void testJsonObject(){
String jsonString = "{\"id\":5,\"name\":\"张三\"}";
//传入需要序列化的json字符串,Student.class代表需要返回的对象类型是student
Student student5 = JSON.parseObject(jsonString , Student.class);
System.out.println(student5);
//Student{id=5, name='张三'}
}
三、@JSONField注解应用
//@JSONField(name = "studentName"):指定序列化之后的属性名
//@JSONField(ordinal = 2):执行序列化之后的属性排序,数值越小,顺序靠前
//@JSONField(format = "YYYY-MM-dd HH-mm-ss") : 格式化序列化之后的时间格式
//@JSONField(serialize = false)是否序列化该字段,默认值为true
private Integer id;
@JSONField(name = "studentName" , ordinal = 1)
private String name;
@JSONField(ordinal = 2)
private Integer age;
@JSONField(serialize = false)
private String email;
private boolean flag;
@JSONField(format = "YYYY-MM-dd HH-mm-ss")
private Date birthday;