关于java:Java对象转JSON时如何动态的增删改查属性

1. 前言

日常开发中少不了JSON解决,少不了须要在JSON中增加额定字段或者删除特定字段的需要。明天咱们就应用Jackson类库来实现这个性能。

2. 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"}

3. 对象转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"}

4. 移除属性

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

5. 扩大

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

JsonNode能够细粒度的拜访JSON信息,提供了十分有用的JSON对象操作API,然而很多人在有相干需要的时候并不可能想到它,所以你不须要具体的记住这些API,只须要记住它能够操作JSON即可。

6. 总结

本文对Jackson动静的增删改查JSON进行了介绍,牵引出一个很重要的操作工具JsonNode。充分利用手中已有的资源来解决问题,无需本人造轮子,也不用引入新的依赖。好了明天的分享就到这里,多多关注:码农小胖哥 及时获取更多无效的编程干货。

关注公众号:Felordcn 获取更多资讯

集体博客:https://felord.cn

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理