• 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

  • 相关阅读:
    测试开发进阶之路,2020 我们砥砺同行!
    【上海/北京/杭州】七牛云工程效率部直聘
    测试开发基础|一文搞定计算机网络(一)
    点点点工程师真的要被淘汰吗?
    电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测
    将H264与AAC打包Ipad可播放的TS流的总结
    Ubuntu阿里云搭建Mono.net环境
    利用正则表达式排除特定字符串
    你敢不敢不要让我这么忙
    离我而去的附录H
  • 原文地址:https://www.cnblogs.com/felordcn/p/13917646.html
Copyright © 2020-2023  润新知