文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-14 05:16

关注

1. 前言

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

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

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

  1.     "username":"felord.cn"
  2.     "age":18 

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

  1.     "username""felord.cn"
  2.     "age": 18, 
  3.     "gender""male" 

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

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

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

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

  1. String json = "{\n" + 
  2.         "    \"username\":\"felord.cn\",\n" + 
  3.         "    \"age\":18\n" + 
  4.         "}"
  5.  
  6. ObjectMapper objectMapper = new ObjectMapper(); 
  7.  
  8. ObjectNode jsonNodes = objectMapper.readValue(json, ObjectNode.class); 
  9. jsonNodes.put("gender""male"); 
  10. String newJson = objectMapper.writeValueAsString(jsonNodes); 
  11. // newJson = {"username":"felord.cn","age":18,"gender":"male"

3. 对象转 JSON 时新增字段

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

  1.  
  2. @Data 
  3. public class User { 
  4.     private String username; 
  5.     private Integer age; 

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

  1. User user = new User(); 
  2. user.setUsername("felord.cn"); 
  3. user.setAge(18); 
  4.  
  5. ObjectMapper objectMapper = new ObjectMapper(); 
  6. ObjectNode jsonNodes = objectMapper.valueToTree(user); 
  7. jsonNodes.put("gender""male"); 
  8. String newJson = objectMapper.writeValueAsString(jsonNodes); 
  9. // newJson = {"username":"felord.cn","age":18,"gender":"male"

4. 移除属性

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

5. 扩展

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

JsonNode

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

6. 总结

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

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

来源:码农小胖哥 内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯