Jackson记录
1.基本使用,序列化和反序列化
序列化
public class JacksonTest {
static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
Person person = new Person();
person.setName("jacksonTest");
person.setAge(38);
String str = objectMapper.writeValueAsString(person);
System.out.println(str);//{"name":"jacksonTest","age":38}
}
}
反序列化
public class JacksonTest {
static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String str = "{\"name\":\"jacksonTest\",\"age\":38}";
Person person = objectMapper.readValue(str, Person.class);
System.out.println(person);//Person(name=jacksonTest, age=38)
}
}
2.反序列化,转带有泛型的,例如List<String>, Map<String, Object> 等 使用 TypeReference
public class JacksonTest {
static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String str = "[{\"name\":\"jacksonTest1\",\"age\":38},{\"name\":\"jacksonTest2\",\"age\":238}]";
List<Person> l1 = objectMapper.readValue(str, new TypeReference<List<Person>>() {});
System.out.println(l1);
List<Person> l2 = objectMapper.readValue(str, List.class);
System.out.println(l2);
}
}
上述代码分别展示了使用TypeReference和未使用TypeReference的情况
主要想说明不使用TypeReference,复杂对象json数组解析出来的是map。后续如果想遍历再调用Person对象的get方法会报错
3.类比fastJson的JsonObject -> ObjectNode, JsonArray -> ArrayNode(内部是ObjectNode)
对象 | 数组 | |
---|---|---|
fastJson | JsonObject | JsonArray |
Jackson | JsonNode | ArrayNode |
JsonNode (主要说明ObjectNode)
创建
JsonNode不能像JsonObject直接new
//依赖于objectMapper创建
ObjectNode objectNode = objectMapper.createObjectNode();
//不依赖与objectMapper,使用JsonNodeFactory
ObjectNode objectNode = JsonNodeFactory.instance.objectNode();
添加
JsonNode是父类,不能直接put,它的子类ObjectNode表示是一个Object
只有ObjectNode才可以使用put或putPOJO方法添加元素
删除
remove(String fieldName)
查询元素
get(String fieldName);//如果查不到,返回一个null
with(String propertyName);//只能取ObjectNode,如果对应的value不是ObjectNode,会抛异常。如果取不到,会在原始json中插入一个空Object
path(String fieldName);//如果查不到,返回的不是null,而是一个MissingNode
at(String var1);//支持更灵活的路径表达,可以用于深度导航、过滤等
//JsonNode node = rootNode.at("/path/to/node");
ArrayNode
创建
ArrayNode的创建依赖于objectMapper
ArrayNode arrayNode = objectMapper.createArrayNode();
添加
add(JsonNode value)
删除
remove(int index)
查询元素
和JsonNode使用类似,要注意方法要使用入参是integer的
4.ObjectMapper的初始化配置
objectMapper可以做一些初始化配置
DeserializationFeature 反序列化的配置
SerializationFeature 序列化的配置
DeserializationFeature | 说明 |
---|---|
USE_BIG_DECIMAL_FOR_FLOATS |
SerializationFeature | 说明 |
---|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2021-12-06 设计模式-外观模式(门面模式)
2021-12-06 设计模式-模板方法模式
2021-12-06 设计模式-原型模式,深拷贝,浅拷贝
2021-12-06 设计模式-代理模式