简介:
Jackson是一个流行的基于Java的JSON处理框架
学习参考:
本篇简介如何使用Jackson进行Java对象与JSON的互相转换
新建基本Student类:
Java代码
packagecom.jingshou.pojo;
importjava.util.Date;
publicclassStudent {
privateintid;
privateString name;
privateDate birthDay;
publicintgetId() {
returnid;
}
publicvoidsetId(intid) {
this.id = id;
}
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicDate getBirthDay() {
returnbirthDay;
}
publicvoidsetBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
@Override
publicString toString() {
return"Student [birthDay="+ birthDay +", id="+ id +", name="
+ name + "]";
}
}
班级类:
Java代码
packagecom.jingshou.pojo;
importjava.util.List;
publicclassClass {
privateString cname;
privateList members;
publicString getCname() {
returncname;
}
publicvoidsetCname(String cname) {
this.cname = cname;
}
publicList getMembers() {
returnmembers;
}
publicvoidsetMembers(List members) {
this.members = members;
}
publicString toString(){
return"The Class Name is: "+ cname +" "+"The members are: "+ members;
}
}
测试代码:
Java代码
packagecom.jingshou.jackson;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
importcom.fasterxml.jackson.databind.ObjectMapper;
importcom.jingshou.pojo.Class;
importcom.jingshou.pojo.Student;
publicclassJacksonTest1 {
publicstaticvoidmain(String[] args)throwsIOException {
Student student1 = newStudent();
student1.setId(5237);
student1.setName("jingshou");
student1.setBirthDay(newDate());
ObjectMapper mapper = newObjectMapper();
// Convert object to JSON string
String Json = mapper.writeValueAsString(student1);
System.out.println("Change Object to JSON String: "+ Json);
// Convert Json string to Object
Student student2 = mapper.readValue(Json, Student.class);
System.out.println(student2);
// Create a student list add it to Bj
Student student3 = newStudent();
student3.setId(5117);
student3.setName("saiya");
student3.setBirthDay(newDate());
List stuList = newArrayList();
stuList.add(student1);
stuList.add(student3);
Class bj = newClass();
bj.setCname("五年二班");
bj.setMembers(stuList);
String json2 = mapper.writeValueAsString(bj);
System.out.println("The JSON from Class is: "+ json2);
Class bj2 = mapper.readValue(json2, Class.class);
System.out.println(bj2);
}
}
运行结果:
Text代码
Change Object to JSON String: {"id":5237,"name":"jingshou","birthDay":1389513906622}
Student [birthDay=Sun Jan 1216:05:06CST2014, id=5237, name=jingshou]
The JSON from Class is: {"cname":"五年二班","members":[{"id":5237,"name":"jingshou","birthDay":1389513906622},{"id":5117,"name":"saiya","birthDay":1389513906859}]}
The Class Name is: 五年二班 The members are: [Student [birthDay=Sun Jan 1216:05:06CST2014, id=5237, name=jingshou], Student [birthDay=Sun Jan1216:05:06CST2014, id=5117, name=saiya]]
Change Object to JSON String: {"id":5237,"name":"jingshou","birthDay":1389513906622}
Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5237, name=jingshou]
The JSON from Class is: {"cname":"五年二班","members":[{"id":5237,"name":"jingshou","birthDay":1389513906622},{"id":5117,"name":"saiya","birthDay":1389513906859}]}
The Class Name is: 五年二班 The members are: [Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5237, name=jingshou], Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5117, name=saiya]]
小结:
转换的关键就是ObjectMapper
在使用ObjectMapper对象readValue或者writeValue的时候,JSON可以以字符串的形式传入,也可以以文件的形式传入,官方的例子是让将JSON保存在文件中
明显JSON字串中的key与Java类中的field名字应该要相同
Student类如果有自定义构造函数的时候,进行JSON->对象转换会出错,接下去再研究这个问题..
Date域是以long类型输出的,有必要的话,需要进行格式转换