做网站链接,专业网站制作流程,闵行做网站费用,旅游网站规划设计ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类#xff0c;它可以帮助我们快速的进行各个类型和Json类型的相互转换。 对应maven#xff1a;
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactId它可以帮助我们快速的进行各个类型和Json类型的相互转换。 对应maven
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.12.2/versionscoperuntime/scope/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.12.2/versionscoperuntime/scope/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.2/versionscoperuntime/scope/dependency1、ObjectMapper的常用配置
private static final ObjectMapper mapper;public static ObjectMapper getObjectMapper(){return this.mapper;
}static{//创建ObjectMapper对象mapper new ObjectMapper()//configure方法 配置一些需要的参数// 转换为格式化的json 显示出来的格式美化mapper.enable(SerializationFeature.INDENT_OUTPUT);//序列化的时候序列对象的那些属性 //JsonInclude.Include.NON_DEFAULT 属性为默认值不序列化 //JsonInclude.Include.ALWAYS 所有属性//JsonInclude.Include.NON_EMPTY 属性为 空“” 或者为 NULL 都不序列化 //JsonInclude.Include.NON_NULL 属性为NULL 不序列化mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); //反序列化时,遇到未知属性会不会报错 //true - 遇到没有的属性就报错 false - 没有的属性不会管不会报错mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//如果是空对象的时候,不抛异常 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // 忽略 transient 修饰的属性mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);//修改序列化后日期格式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); mapper.setDateFormat(new SimpleDateFormat(yyyy-MM-dd HH:mm:ss));//处理不同的时区偏移格式mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);mapper.regi sterModule(new JavaTimeModule());}
2、ObjectMapper的常用方法
1json字符串转对象
ObjectMapper mapper new ObjectMapper();
String jsonString {\name\:\Hyl\, \age\:20};//将字符串转换为对象
Student student mapper.readValue(jsonString, Student.class);
System.out.println(student);//将对象转换为json字符串
jsonString mapper.writeValueAsString(student);
System.out.println(jsonString);
结果
Student [ name: Hyl, age: 20 ]{name : Hyl,age : 20
}
2数组和对象之间转换
//对象转为byte数组
byte[] byteArr mapper.writeValueAsBytes(student);
System.out.println(byteArr);//byte数组转为对象
Student student mapper.readValue(byteArr, Student.class);
System.out.println(student);
结果
[B3327bd23Student [ name: Hyl, age: 20 ]
3集合和json字符串之间转换
ListStudent studentList new ArrayList();
studentList.add(new Student(hyl1 ,20 , new Date()));
studentList.add(new Student(hyl2 ,21 , new Date()));
studentList.add(new Student(hyl3 ,22 , new Date()));
studentList.add(new Student(hyl4 ,23 , new Date()));String jsonStr mapper.writeValueAsString(studentList);
System.out.println(jsonStr);ListStudent studentList2 mapper.readValue(jsonStr, List.class);
System.out.println(字符串转集合 studentList2 );
结果
[ {name : hyl1,age : 20,sendTime : 1525164212803
}, {name : hyl2,age : 21,sendTime : 1525164212803
}, {name : hyl3,age : 22,sendTime : 1525164212803
}, {name : hyl4,age : 23,sendTime : 1525164212803
} ]
[{namehyl1, age20, sendTime1525164212803}, {namehyl2, age21, sendTime1525164212803}, {namehyl3, age22, sendTime1525164212803}, {namehyl4, age23, sendTime1525164212803}]
4map和json字符串之间转换
MapString, Object testMap new HashMap();
testMap.put(name, 22);
testMap.put(age, 20);
testMap.put(date, new Date());
testMap.put(student, new Student(hyl, 20, new Date()));String jsonStr mapper.writeValueAsString(testMap);
System.out.println(jsonStr);
MapString, Object testMapDes mapper.readValue(jsonStr, Map.class);
System.out.println(testMapDes);
结果
{date : 1525164212803,name : 22,student : {name : hyl,age : 20,sendTime : 1525164212803,intList : null},age : 20
}
{date1525164212803, name22, student{namehyl, age20, sendTime1525164212803, intListnull}, age20}
5日期转json字符串
// 修改时间格式
mapper.setDateFormat(new SimpleDateFormat(yyyy-MM-dd HH:mm:ss));
Student student new Student (hyl,21, new Date());
student.setIntList(Arrays.asList(1, 2, 3));String jsonStr mapper.writeValueAsString(student);
System.out.println(jsonStr);
结果
{name : hyl,age : 21,sendTime : 2020-07-23 13:14:36,intList : [ 1, 2, 3 ]
}
6readTree()方法
//此方法更灵活可以只将用户感兴趣的Json串信息值提取出来。主要利用ObjectMapper提供的readTree和Jackson提供的JsonNode类来实现String test{results:[{objectID:357,geoPoints:[{x:504604.59802246094,y:305569.9150390625}]},{objectID:358,geoPoints:[{x:504602.2680053711,y:305554.43603515625}]}]};//此Json串比较复杂包含了嵌套数组的形式具有通用性。//2.2.2.2实现反序列化
JsonNode node objectMapper.readTree(test); //将Json串以树状结构读入内存JsonNode contentsnode.get(results);//得到results这个节点下的信息for(int i0;icontents.size();i) //遍历results下的信息size()函数可以得节点所包含的的信息的个数类似于数组的长度{System.out.println(contents.get(i).get(objectID).getIntValue()); //读取节点下的某个子节点的值JsonNode geoNumbercontents.get(i).get(geoPoints);for(int j0;jgeoNumber.size();j) //循环遍历子节点下的信息{System.out.println(geoNumber.get(j).get(x).getDoubleValue() geoNumber.get(j).get(y).getDoubleValue());}}