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

Java对象转JSON时如何动态的增删改查属性的更多相关文章

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

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

  2. (一)Mybatis基本配置,Statement方式,动态代理增删改查

    首先明白Mybatis是干什么的,之前使用jdbc操作数据库时候要写很多语句,获取光标,连接,获取具体对象进行相应操作,代码过于繁琐,所以现在有了Mybatis,它将这个操作整合在了一起,你不需要关心 ...

  3. 纯Java JDBC连接数据库,且用JDBC实现增删改查的功能

    Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...

  4. Java Web项目案例之---登录注册和增删改查(jsp+servlet)

    登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...

  5. java图书管理的一个小模块(增删改查,不使用数据库)

    图书管理模块:某图书管需要对图书进行信息化管理,要求管理员能够进行新增图书,能按照书名进行模糊查看图书能进行价格统计 系统实现如下:1.新增2.查询3.统计价格 1请输入新书:图书号,书名,作者,价格 ...

  6. 【HBase】通过Java代码实现HBase数据库中数据的增删改查

    目录 创建maven工程,导入jar包 java代码实现创建hbase表 java代码实现向hbase表中插入数据 java代码查询hbase数据 使用rowKey查询指定列族指定列的值 通过star ...

  7. 使用Java api对HBase 2.4.5进行增删改查

    1.运行hbase 2.新建maven项目 2.将hbase-site.xml放在项目的resources文件夹下 3.修改pom.xml文件,引入hbase相关资源 <repositories ...

  8. AppBox升级进行时 - Entity Framework的增删改查

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. Entity Framework新增数据 以新增用户为例,作为对比,先来看下使 ...

  9. Java学习笔记34(sql基础 :增删改查1)

    create database qy97;/*创建数据库*/ use qy97; /*使用数据库 use 数据库名*/ show tables; /*查看所有的表*/ select database( ...

随机推荐

  1. kafka-Reblance

    谁来执行Rebalance以及管理consumer的group呢 coordinator来执行对于consumer group的管理,当consumer group的第一个consumer启动的时候, ...

  2. python_多级菜单_纯循环与分支

    源代码: #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog__ = 'http://www.cnblogs.com/2bjiujiu/' d ...

  3. .NetCore.RazorPages 获取访客的公网IP与局域网IP

    dotnet.core 获取访客的公网IP与局域网IP 现在奉上代码 public void OnGet() {var ip = Content(HttpContext.Connection.Remo ...

  4. AD技巧之原理图元器件统一重新编号

    本文将简要介绍Altium Designer中如何进行原理图元器件统一命名,这是Altium Designer软件一个小技巧,在学习和工程实践中,都十分有用的技能. 第一步:打开原理图 第二步:点击& ...

  5. Java知识系统回顾整理01基础04操作符06三元运算符

    一.三元运算符 表达式?值1:值2 如果表达式为真 返回值1 如果表达式为假 返回值2 if语句学习链接:if语句 public class HelloWorld { public static vo ...

  6. 关于freemodbus协议中eMBFuncReadHoldingRegister()函数的所谓错误

    摘要:网上看到有好心的网友提示,freemodbus协议中的mbfuncholding.c 文件中eMBFuncReadHoldingRegister()函数,有一处错误,即:第185行的" ...

  7. 轻松理解JVM的分代模型

    前言 上篇文章我们一起对jvm的内存模型有了比较清晰的认识,小伙伴们可以参考JVM内存模型不再是秘密这篇文章做一个复习. 本篇文章我们将针对jvm堆内存的分代模型做一个详细的解析,和大家一起轻松理解j ...

  8. JVM系列【4】内存模型

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 硬件层数据一致性 - 存储器层次结构 从L6-L0 空间由大变小,速度由慢 ...

  9. fastjson,对象转json字符串的过程中对value为null的值的一些处理

    前言 fastjson是一个非常好用的java库,用于操作对象json序列化等等. 问题 最近在写代码的时候遇到问题,通过JSON.toJSONString方法将一个实体对象转为json字符串,转出来 ...

  10. RHSA-2018:0151-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...