使用场景:
目前使用场景只有发送和接受网络请求的时候,需要使用json格式来收发数据。
转换工具:
Jackson。还有一种比较常见的Gson,用哪个都行,只是工具而已。
序列化:java对象转为json字符串
实体类:
public class JsonAndBean {
@JsonProperty("schoolname")
private String school;
@JsonProperty("teacher")
private Teacher teacher;
@JsonProperty("aaaaa")
private String aaaaa;
@JsonProperty("student")
private Student student;
//此处省略set,get方法等。。。
}
public class Teacher {
//姓名
@JsonProperty("name")
private String name;
//年龄
@JsonProperty("age")
private int age;
//此处省略set,get方法等。。。
}
public class Student {
//姓名
@JsonProperty("name")
private String name;
//此处省略set,get方法等。。。
}
添加数据:
JsonAndBean jsonAndBean = new JsonAndBean();
jsonAndBean.setSchool("我的大学");
jsonAndBean.setStudent(new Student("小明"));
jsonAndBean.setTeacher(new Teacher("李老师",29));
序列化:
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "";
try {
jsonString = objectMapper.writeValueAsString(jsonAndBean);
System.out.println(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(jsonString);
序列化的字符串:
{"schoolname":"我的大学","teacher":{"name":"李老师","age":29},"aaaaa":null,"student":{"name":"小明"}}
反序列化:json字符串转为java对象
json字符串:
String jsonString = "{\"schoolname\":\"我的大学\",\"teacher\":{\"name\":\"李老师\",\"age\":29},\"aaaaa\":\"11\",\"student\":{\"name\":\"小明\"}}";
反序列化:
ObjectMapper objectMapper = new ObjectMapper();
JsonAndBean jsonAndBean = new JsonAndBean();
try {
jsonAndBean = objectMapper.readValue(jsonString, JsonAndBean.class);
System.out.println(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(jsonAndBean.toString());
注意:反序列化的时候实体类中不能自定义构造函数
总结:
@JsonProperty注解对应的是json字符串中的名字,如果名字能对应上不写注解也无所谓。写注解的好处有两点,第一是方便识别,第二是用来转换驼峰。序列化或者反序列化的时候一定注意字符串的书写是否正确,数值类型是否对应上,反序列化的时候不要漏字段。