拜托!学妹,Java对象转JSON时如何动态的增删改查属性这道题很简单!
一. 前言
日常开发中少不了JSON解决,少不了需要在JSON中增加额外字段或者者删除特定字段的需求。今天我们就使用Jackson类库来实现这个功能。
二. 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"}
三. 对象转JSON时新添加字段
有时候我们定义的对象没有包含特定的字段,但是转成JSON时同样需要有额外的字段。跟章节2相似,,只不过提供的不再是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"}
四. 移除属性
无论是JSON字符串或者者Java对象转JSON时,移除属性跟上面的思路一样,只要要调用remove
方法就可,这里不再演示。
五. 扩展
上面的所有操作都是借助于了Jackson中的JsonNode
派生的JSON节点类完成的,关系如下:
JsonNode
可以细粒度的访问JSON信息,提供了非常有用的JSON对象操作API,但是很多人在有相关需求的时候并不能够想到它,所以你不需要具体的记住这些API,只要要记住它可以操作JSON就可。
六. 总结
本文对Jackson动态的增删改查JSON进行了详情,牵引出一个很重要的操作工具JsonNode
。充分利用手中已有的资源来处理问题,无需自己造轮子,也不必引入新的依赖。好了今天的分享就到这里。
码字不易,你的支持就是我的动力,觉得有帮助到你的朋友,欢迎多多点赞转发评论。
作者:码农小胖哥
链接:https://juejin.im/post/6890697761780563982
来源:掘金
著作权归作者所有。商业转载请联络作者取得受权,非商业转载请注明出处。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 拜托!学妹,Java对象转JSON时如何动态的增删改查属性这道题很简单!