乐趣区

关于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

退出移动版