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
。充分利用手中已有的资源来解决问题,无需自己造轮子,也不必引入新的依赖。
2020-09-01
2020-10-13
2020-09-08
2020-10-09
本文分享自微信公众号 - 日拱一兵(gh_6235a38420b9)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4149877/blog/4699620