博客
关于我
Java对象转JSON时如何动态的增删改查属性
阅读量:412 次
发布时间:2019-03-06

本文共 1858 字,大约阅读时间需要 6 分钟。

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时同样需要有额外的字段。跟类似,,只不过提供的不再是JSON字符串而是Java对象:

/** * @author felord.cn * @since 11:02 */@Datapublic 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 获取更多资讯

转载地址:http://eojuz.baihongyu.com/

你可能感兴趣的文章
(数据科学学习手札27)sklearn数据集分割方法汇总
查看>>
(数据科学学习手札40)tensorflow实现LSTM时间序列预测
查看>>
[整理] 哪些集合类是线程安全的?(Java)
查看>>
8 个警示和学习的 5 个阶段
查看>>
c# 图片带水纹波动
查看>>
H5 贪吃蛇源码
查看>>
从零开始学安全(十六)● Linux vim命令
查看>>
从零开始学安全(三十四)●百度杯 ctf比赛 九月场 sqli
查看>>
3389连接痕迹清除
查看>>
发生系统错误 6118
查看>>
阿里巴巴Json工具-Fastjson教程
查看>>
Spring Cloud Gateway - 快速开始
查看>>
Spring Security 实战干货:理解AuthenticationManager
查看>>
Java对象转JSON时如何动态的增删改查属性
查看>>
Python 面向对象进阶
查看>>
Linux常用统计命令之wc
查看>>
Git安装及使用以及连接GitHub方法详解
查看>>
docker容器与虚拟机的区别
查看>>
shell脚本里使用echo输出颜色
查看>>
Python2跟Python3的区别
查看>>