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
。充分利用手中已有的资源来解决问题,无需自己造轮子,也不必引入新的依赖。好了今天的分享就到这里,多多关注下方公众号:码农小胖哥 及时获取更多编程干货。
往期推荐
仅用六个字符来完成Hello World,你能做到吗?
StackOverflow热帖:Java整数相加溢出怎么办?
星巴克是如何处理订单的?
MIT黑科技:通过手机记录的咳嗽数据检测是否感染新冠病毒
10个你可能不曾用过却很有用的 LINUX 命令
﹀
﹀
﹀
深度内容
推荐加入
最近热门内容回顾 #技术人系列
Java对象转JSON时如何动态的增删改查属性相关推荐
- 转json_Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- jaba窗体连接mysql增删改查_知识实现——Java使用jdbc连接MySql数据库,实现增删改查...
Java使用jdbc连接MySql数据库,实现增删改查 首先,导入MySql连接数据库的jar包,我用的是 mysql连接jar包 DB类,用于获得数据库连接 import java.sql.Driv ...
- Java Web 应用实例 servlet实现oracle 基本增删改查
原文地址为: Java Web 应用实例 servlet实现oracle 基本增删改查 很久没有写博客了,可能是太懒散,不愿意把时间花在这上面,可是我心里还是知道写博客的重要性的 ,所以从今天开始 , ...
- Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码
Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- JAVA 通讯录 —— 实现对XML文件数据的增删改查
心血来潮,带着好奇写了人生中第一篇博客,哈哈哈哈 ~ 嗝 ~ ~ 这篇文章主要就是分享自己做的一次项目作业,一是为了分享,二是用另外一种方式保存自己的代码 嘻嘻嘻 ~.还是个编程萌新,所以有啥写的 ...
- Java学习(84)Java集合——案例:公告管理(ArrayList增删改查)
案例:公告管理,增删改查(ArrayList增删改查) 公告管理需求: 1. 功能需求 2. 公告类属性: 3. 公告类方法 实现代码 定义公告类 公告的添加和显示 公告的删除和修改 运行结果: 公告 ...
- (Java/JDBC)对MySQL数据库实现基础的增删改查操作(含源码)
文章目录 前言 注(常用PreparedStatement方法) 源码展示 前言 实现数据库连接 → Java连接MySQL数据库(含源码) (实现简单的增删查改更改正确的SQL语句即可) 增:ins ...
- java jdbc标签jsp_jsp+servlet+javabean+jdbc实现增删改查和分页功能 案例源码
[实例简介] 客户管理案例 1.目的:总结JDBC,和Servlet JSP结合到一起. 2.开发中的一些小技巧. 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * ...
最新文章
- python五:运算符
- 华为语音助手怎么关闭_一直觉得华为语音助手挺鸡肋的,直到用了这个功能!真香...
- Spring boot登录错误提示
- Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>
- arm linux 开机电路_【技术角度看问题之一】ARM到底是个啥?
- Blas SGEMM launch failed
- 微信无法连接到服务器怎么诊断网络【微信高级教程3】
- dubbo yml配置_Dubbo常见配置说明
- 1.Jenkins 2 权威指南 --- 简介
- Hibernate框架使用教程
- Cisco Packet Tracer中配置链路聚合
- 订阅内容解码失败(非base64码)_【每日礼包】超杀默示录 密文解码礼包大全
- 学习乐器的好处(1)
- 职称计算机考试时的输入法,2017年高级职称计算机预习:输入法的使用
- html添加一条虚线垂直的,【html问题】在网页中添加垂直分割线
- Linux + JAVA得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
- 人人都是产品经理读书笔记
- Kubernetes TCP端口号
- 397_压缩图片到一定大小(质量)
- 个体工商户注册后,都需做哪些事呢?这3点很重要
热门文章
- zimbra xxe+ssrf 导致 getshell
- python3 redis操作 错误 cannot import name 'StrictRedis' from 'redis'
- goland 报错 Main file has non-main package or doesn’t contain main function
- pyinstaller3.5 和 python 3.8 不兼容
- linux 非交互ssh sshpass简介
- smarty foreach函数
- Windows8 解决VMware与Hyper-V不兼容共存方法
- 直接内存访问(DMA)
- Linux下逻辑地址-线性地址-物理地址图解
- javabean反射改字段内容_BAT程序员编写:深入理解 Java 反射和动态代理源码分析...