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);

posted @   云轻YK  阅读(165)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示