拜托!学妹,Java对象转JSON时如何动态的增删改查属性这道题很简单!

一. 前言

日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求。今天我们就使用Jackson类库来实现这个功能。

二. JSON字符串增加额外字段

假如我们有这样结构的JSON:

{
    "username":"felord.cn",
    "age":18
}

期望增加一个性别字段gender:

{
    "username": "felord.cn",
    "age": 18,
    "gender": "male"
}

首先使用ObjectMapper加载JSON字符串,为ObjectNode:

ObjectNode jsonNodes = objectMapper.readValue(json, ObjectNode.class);

ObjectNode提供了很多操作JSON属性的方法:

  • get 根据索引或者字段名获取对应的JsonNode
  • put系列方法 提供了将基本类型、null值、对象、数组、原始值添加到JSON的能力。

正好我们可以借助于put方法来完成额外新增字段,完整的代码片段:

String json = "{\n" +
        "    \"username\":\"felord.cn\",\n" +
        "    \"age\":18\n" +
        "}";

ObjectMapper objectMapper = new ObjectMapper();

ObjectNode jsonNodes = objectMapper.readValue(json, ObjectNode.class);
jsonNodes.put("gender", "male");
String newJson = objectMapper.writeValueAsString(jsonNodes);
// newJson = {"username":"felord.cn","age":18,"gender":"male"}

三. 对象转JSON时新增字段

有时候我们定义的对象没有包含特定的字段,但是转成JSON时同样需要有额外的字段。跟章节2类似,,只不过提供的不再是JSON字符串而是Java对象:

/**
 * @author felord.cn
 * @since 11:02
 */
@Data
public class User {
    private String username;
    private Integer age;
}

其实思路很明确,只要我们能够将对象转换为ObjectNode就可以如法炮制。ObjectMapper提供了valueToTree方法可以实现这一点,所以对象转JSON时新增字段完整的DEMO为:

User user = new User();
user.setUsername("felord.cn");
user.setAge(18);

ObjectMapper objectMapper = new ObjectMapper();
ObjectNode jsonNodes = objectMapper.valueToTree(user);
jsonNodes.put("gender", "male");
String newJson = objectMapper.writeValueAsString(jsonNodes);
// newJson = {"username":"felord.cn","age":18,"gender":"male"}

四. 移除属性

无论是JSON字符串或者Java对象转JSON时,移除属性跟上面的思路一样,只需要调用remove方法即可,这里不再演示。

五. 扩展

上面的所有操作都是借助于了Jackson中的JsonNode派生的JSON节点类完成的,关系如下:

JsonNode可以细粒度的访问JSON信息,提供了非常有用的JSON对象操作API,但是很多人在有相关需求的时候并不能够想到它,所以你不需要具体的记住这些API,只需要记住它可以操作JSON即可。

六. 总结

本文对Jackson动态的增删改查JSON进行了介绍,牵引出一个很重要的操作工具JsonNode。充分利用手中已有的资源来解决问题,无需自己造轮子,也不必引入新的依赖。好了今天的分享就到这里。

码字不易,你的支持就是我的动力,觉得有帮助到你的朋友,欢迎多多点赞转发评论。

作者:码农小胖哥
链接:https://juejin.im/post/6890697761780563982
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容