1.前言日常开发中少不了JSON处理,少不了需要在JSON中增加额外的字段或者删除特定的字段。今天我们使用Jackson类库来实现这个功能。2.向JSON字符串添加额外的字段如果我们有一个具有这种结构的JSON:{"username":"felord.cn","age":18}希望添加一个性别字段gender:{"username":"felord.cn","age":18,"gender":"male"}首先使用ObjectMapper加载JSON字符串,ObjectNode:ObjectNodejsonNodes=objectMapper.readValue(json,ObjectNode.class);ObjectNode提供了很多操作JSON属性的方法:get根据索引或字段名获取对应的JsonNode。put系列方法提供了向JSON添加原始类型、空值、对象、数组和原始值的能力。正好我们可以使用put方法补全新的字段,完整代码片段:Stringjson="{\n"+"\"username\":\"felord.cn\",\n"+"\"年龄\":18\n"+"}";ObjectMapperobjectMapper=newObjectMapper();ObjectNodejsonNodes=objectMapper.readValue(json,ObjectNode.class);jsonNodes.put("gender","male");StringnewJson=objectMapper.writeValueAsString(jsonNodes);//newJson={"username":"felord.cn","age":18,"gender":"male"}3.对象转JSON时添加新字段有时我们定义的对象并不包含特定字段,但在转换为JSON时还需要其他字段。和第二章类似,只是Java对象不再以JSON字符串形式提供:/***@authorfelord.cn*@since11:02*/@DatapublicclassUser{privateStringusername;privateIntegerage;}其实思路很清晰,只要我们可以通过将对象转换为ObjectNode来做同样的事情。ObjectMapper提供了valueToTree方法来实现,所以完整的对象转JSON时添加新字段的DEMO为:Useruser=newUser();user.setUsername("felord.cn");user.setAge(18);ObjectMapperobjectMapper=newObjectMapper();ObjectNodejsonNodes=objectMapper.valueToTree(user);jsonNodes.put("性别","男");StringnewJson=objectMapper.writeValueAsString(jsonNodes);//newJson={"用户名":"felord.cn",“年龄”:18,“性别”:“男”}4。移除属性无论是JSON字符串还是转成JSON的Java对象,移除属性都和上面的思路一样,调用remove方法即可,不再demo。5.Extension以上所有操作都是借助Jackson中JsonNode派生的JSON节点类完成的,关系如下:JsonNodeJsonNode可以细粒度的访问JSON信息,并提供了非常好用的JSON对象操作API,但是很多人在有相关需求的时候是想不起来的,所以不用特意记住这些API,只要记住它可以操作JSON即可。6.小结本文介绍了Jackson对JSON的动态增删改查,引出了一个非常重要的操作工具JsonNode。充分利用你手头已有的资源来解决问题,而不必自己发明轮子或引入新的依赖。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。
