一、 fastXml Jackson
1. 概述
a) 简介:是一个基于java平台的数据处理工具,json解析器。可以将java对象序列化为json格式的字符串,也可以将json反序列化为java对象。
b) 处理方法
i. Streaming API:高效(开销低,速度快,但是程序编写复杂)
i. Tree Model:灵活
iii. Data Binding:是最常用的处理方式
2. DataBinding 处理json
c) Java对象序列化为json
i. new ObjectMapper().writeValue()相关方法
d) Json字符串反序列化为java对象
i. new ObjectMapper().readValue() 相关方法
3. Tree Model 处理json
e) 生成json
i. 创建相关节点,如objectNode、arrayNode,节点之间可以相互嵌套添加(形成父子兄弟节点关系)。
| //创建节点工厂用于创建相关节点 JsonNodeFactory factory = new JsonNodeFactory(false); ObjectNode country = factory.objectNode(); |
| /*对节点的操作*/ //对节点设置值,ObjectNode类型节点用put方法,ArrayNode类型节点用add方法 country.put(key,value); array.add(value).add(value); //节点之间的关联 set方法 country.set(key,array); |
ii. 创建json生产器
| //创建一个json factory来写tree modle为json JsonFactory jsonFactory = new JsonFactory(); //创建一个json生成器,指定json生成的位置 JsonGenerator generator = jsonFactory.createGenerator(new FileWriter(new File(“country2.json”))); |
iii. 生成json
| ObjectMapper mapper=new ObjectMapper(); //根据根节点country 和generator生成器生成json Mapper.writeTree(generator,country) |
f) Json字符串反序列化为treemode:读取解析json
i. 读取json文件,生成JsonNode的树模型
| ObjectMapper mapper = new ObjectMapper(); // Jackson提供一个树节点被称为”JsonNode”,ObjectMapper提供方法来读json作为树的JsonNode根节点 JsonNode node = mapper.readTree(new File(“country2.json”)); |
ii. 解析json文件(解析JsonNode)
| //获得所有子节点的名字,返回一个所有节点名字的迭代器 Iterator<String> nodesName= node.fieldNames(); //根据节点名字获得节点 JsonNode anode=node.get(key); //get方法当key存在时返回null JsonNode anode=node.path(key); //path方法当key不存在时返回MISSING 类型的JsonNode //获得节点的值 String value=anode.asInt(); String value=anode.asTest(); |
4. Stream处理json
g) 生成json
i. 创建JsonGenerator生成器
| JsonFactory factory = new JsonFactory(); //从JsonFactory创建一个JsonGenerator生成器的实例 ,并制定json文件 JsonGenerator generator = factory.createGenerator(new FileWriter(new File(“country3.json”))); |
ii. 利用JsonGenerator对象的相关方法生成json内容
h) 解析处理json
i. 生成json的解析器
| JsonFactory factory = new JsonFactory(); // 从JsonFactory创建JsonParser解析器的实例 JsonParser parser = factory.createParser(new File(“country3.json”)); |
ii. 利用解析器的相关方法解析json
5. LocalDataTime序列化反序列化格式问题
a) 问题:
a) 默认序列化的格式很不友好,可读性很低
b) 反序列化报错失败(com.fasterxml.jackson.databind.JsonMappingException: Can notconstruct instance of java.time.LocalDateTime)
b) 解决
a) 继承StdSerializer类重写serialize方法指定序列化格式
| packagecom.deserialize;
|
a) 继承JsonDeserializer类重写deserialize方法指定反序列化的格式
package com.deserialize; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * 指定反序列化的格式 * @author user * @create 2017- 11 - 22 - 16:47 */ public class LocalDataTimeDeserialize extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { String dateTimeString = p.getValueAsString(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); //return LocalDateTime.from(LocalDateTime.parse(dateTimeString, formatter)); return LocalDateTime.parse(dateTimeString,formatter); } }
|
b) 继承ObjectMapper方法创建自己的ObjectMapper类,添加LocalDateTime的序列化和反序列化
package com.mapper; import com.deserialize.LocalDataTimeDeserialize; import com.deserialize.LocalDataTimeSerialize; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import javax.security.auth.spi.LoginModule; import java.time.LocalDateTime; /** * @author user * @create 2017- 11 - 22 - 16:24 */ public class LocalDataTimeObjectMapper extends ObjectMapper { public LocalDataTimeObjectMapper() { this.registerModule(new LocalDateTimeModule()); } class LocalDateTimeModule extends SimpleModule{ public LocalDateTimeModule(){ addSerializer(LocalDateTime.class,new LocalDataTimeSerialize()); addDeserializer(LocalDateTime.class,new LocalDataTimeDeserialize()); } } }
|
6. 学习资料:http://blog.csdn.net/xiong9999/article/details/53781695
本文详细介绍了fastxml Jackson库,包括其概述、DataBinding处理json、Tree Model操作和Stream处理方式。重点讨论了LocalDateTime的序列化反序列化格式问题及其解决方案,提供了相关学习资源。

6万+

被折叠的 条评论
为什么被折叠?



