zoukankan      html  css  js  c++  java
  • 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 = "{
    " +
            "    "username":"felord.cn",
    " +
            "    "age":18
    " +
            "}";
    
    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。充分利用手中已有的资源来解决问题,无需自己造轮子,也不必引入新的依赖。好了今天的分享就到这里,多多关注:码农小胖哥 及时获取更多有效的编程干货。

    关注公众号:Felordcn 获取更多资讯

    个人博客:https://felord.cn

  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/felordcn/p/13917646.html
Copyright © 2011-2022 走看看