Jackson
ObjectMapper
序列化与反序列化的工具类
此类中提供了readTree()
,readValue()
,writeValueAsString()
等方法用于转换。
ObjectMapper objectMapper = new ObjectMapper();
序列化
student student = new student();
String studentJson = objectMapper.writeValueAsString(student);
下面是一个studentJson
{
"name" : "zhangsan",
"age" : 18,
"code": [1,2],
"parents" : {
"father" : "baba",
"mother" : "mama"
}
}
一次性反序列化
//自定义dto
Student student = objectMapper.readValue(studentJson, Student.class);
//Map
Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class);
渐次反序列化
JsonNode student = objectMapper.readTree(studentJson);//将Json串以树状结构读入内存
JsonNode parents = student.get("parents");//得到parents这个节点下的信息
for(int i = 0; i < parents.size(); i++){
//遍历parents下的信息,size()获得parents下二级节点的个数
}
//获取student下二级节点的信息,形成迭代器
Iterator<JsonNode> elements = student.elements();
JsonNode
//JsonNode通过writeValueAsString方法可以产出Json
JsonNode student = objectMapper.readTree(studentJson);
String json = objectMapper.writeValueAsString(student);
//获取JsonNode field属性的信息,若field是ObjectNode,其value仍保持树状结构
//例如studentJson中的parents节点即为ObjectNode,即其存在_children属性,其类型为LinkedHashMap
JsonNode field = jsonNode.get("field");
//可以调用其中的asText()方法转换为String
//类似于cmd的cd命令 切换当前路径
JsonNode father = student.at("/parents/father");
//注意此时father为TextNode,value只有值
//在路径不涉及孙节点时get和at没有区别
ArrayNode转List
//假设fileArrayNode是一个ArrayNode
List<FileDto> fileDtos = objectMapper.readerFor(new TypeReference<List<FileDto>>(){}).readValue(fileArrayNode);
对象转ObjectNode并添加至ArrayNode中
ObjectNode fileNode = mapper.valueToTree(FileDto);
fileArrayNode.add(fileNode);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!