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

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

6. 总结

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

往期推荐

仅用六个字符来完成Hello World,你能做到吗?

StackOverflow热帖:Java整数相加溢出怎么办?

星巴克是如何处理订单的?

MIT黑科技:通过手机记录的咳嗽数据检测是否感染新冠病毒

10个你可能不曾用过却很有用的 LINUX 命令

深度内容

推荐加入

最近热门内容回顾   #技术人系列

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

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

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

  2. jaba窗体连接mysql增删改查_知识实现——Java使用jdbc连接MySql数据库,实现增删改查...

    Java使用jdbc连接MySql数据库,实现增删改查 首先,导入MySql连接数据库的jar包,我用的是 mysql连接jar包 DB类,用于获得数据库连接 import java.sql.Driv ...

  3. Java Web 应用实例 servlet实现oracle 基本增删改查

    原文地址为: Java Web 应用实例 servlet实现oracle 基本增删改查 很久没有写博客了,可能是太懒散,不愿意把时间花在这上面,可是我心里还是知道写博客的重要性的 ,所以从今天开始 , ...

  4. Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码

    Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...

  5. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  6. JAVA 通讯录 —— 实现对XML文件数据的增删改查

    心血来潮,带着好奇写了人生中第一篇博客,哈哈哈哈 ~ 嗝 ~ ~   这篇文章主要就是分享自己做的一次项目作业,一是为了分享,二是用另外一种方式保存自己的代码 嘻嘻嘻 ~.还是个编程萌新,所以有啥写的 ...

  7. Java学习(84)Java集合——案例:公告管理(ArrayList增删改查)

    案例:公告管理,增删改查(ArrayList增删改查) 公告管理需求: 1. 功能需求 2. 公告类属性: 3. 公告类方法 实现代码 定义公告类 公告的添加和显示 公告的删除和修改 运行结果: 公告 ...

  8. (Java/JDBC)对MySQL数据库实现基础的增删改查操作(含源码)

    文章目录 前言 注(常用PreparedStatement方法) 源码展示 前言 实现数据库连接 → Java连接MySQL数据库(含源码) (实现简单的增删查改更改正确的SQL语句即可) 增:ins ...

  9. java jdbc标签jsp_jsp+servlet+javabean+jdbc实现增删改查和分页功能 案例源码

    [实例简介] 客户管理案例 1.目的:总结JDBC,和Servlet JSP结合到一起. 2.开发中的一些小技巧. 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * ...

最新文章

  1. python五:运算符
  2. 华为语音助手怎么关闭_一直觉得华为语音助手挺鸡肋的,直到用了这个功能!真香...
  3. Spring boot登录错误提示
  4. Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>
  5. arm linux 开机电路_【技术角度看问题之一】ARM到底是个啥?
  6. Blas SGEMM launch failed
  7. 微信无法连接到服务器怎么诊断网络【微信高级教程3】
  8. dubbo yml配置_Dubbo常见配置说明
  9. 1.Jenkins 2 权威指南 --- 简介
  10. Hibernate框架使用教程
  11. Cisco Packet Tracer中配置链路聚合
  12. 订阅内容解码失败(非base64码)_【每日礼包】超杀默示录 密文解码礼包大全
  13. 学习乐器的好处(1)
  14. 职称计算机考试时的输入法,2017年高级职称计算机预习:输入法的使用
  15. html添加一条虚线垂直的,【html问题】在网页中添加垂直分割线
  16. Linux + JAVA得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
  17. 人人都是产品经理读书笔记
  18. Kubernetes TCP端口号
  19. 397_压缩图片到一定大小(质量)
  20. 个体工商户注册后,都需做哪些事呢?这3点很重要

热门文章

  1. zimbra xxe+ssrf 导致 getshell
  2. python3 redis操作 错误 cannot import name 'StrictRedis' from 'redis'
  3. goland 报错 Main file has non-main package or doesn’t contain main function
  4. pyinstaller3.5 和 python 3.8 不兼容
  5. linux 非交互ssh sshpass简介
  6. smarty foreach函数
  7. Windows8 解决VMware与Hyper-V不兼容共存方法
  8. 直接内存访问(DMA)
  9. Linux下逻辑地址-线性地址-物理地址图解
  10. javabean反射改字段内容_BAT程序员编写:深入理解 Java 反射和动态代理源码分析...