深入了解 Jackson 之 JsonNode

Jackson JsonNode类,完整路径为com.fasterxml.jackson.databind.JsonNode,是Jackson的json树模型(对象图模型)。Jackson能读 JSON 至 JsonNode 实例,写 JsonNode 到 JSON。

操作示例

     public static void main(String[] args) throws IOException {
        String json = "{ \"name\" : \"汉字\", \"age\" : 28, \"height\": 1.75, \"ok\": true}";

        ObjectMapper objectMapper = new ObjectMapper();

        JsonNode jsonNode = objectMapper.readTree(json); 

        System.out.println("class: " + jsonNode.getClass());
        System.out.println("\njsonNode.getNodeType(): " + jsonNode.getNodeType());
        Iterator<String> names = jsonNode.fieldNames();
        System.out.println("\njsonNode.fieldNames() type: " + names);
        System.out.print("\njsonNode.fieldNames().foreach: [");
        while (names.hasNext()) {
            System.out.print(names.next() + ", ");
        }
        System.out.println("]");
        Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();
        System.out.println("\njsonNode.fields(): " + fields);
        System.out.print("\njsonNode.fields().foreach: {");
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> entry = fields.next();
            JsonNode node = entry.getValue();
            System.out.print(entry.getKey() +": "+ node.asText() + ", ");
        }
        System.out.println("}");
    }

结果

class: class com.fasterxml.jackson.databind.node.ObjectNode

jsonNode.getNodeType(): OBJECT

jsonNode.fieldNames() type: java.util.LinkedHashMap$LinkedKeyIterator@1a04f701

jsonNode.fieldNames().foreach: [name, age, height, ok, ]

jsonNode.fields(): java.util.LinkedHashMap$LinkedEntryIterator@159f197

jsonNode.fields().foreach: {name: 汉字, age: 28, height: 1.75, ok: true, }

结果的第一条可知 JsonNode 真实的实现类是 ObjectNode

类型判断

JsonNode 包含一系列可以判断类型的方法


image.png

ObjectNode

继承关系: ObjectNode <- ContainerNode<ObjectNode> <- BaseJsonNode <- JsonNode
JsonNode 是一个只读抽象类,不能直接构建 JsonNode 实例的对象图,需要创建 JsonNode 的子类ObjectNode 实例的对象图。作为 JsonNode 的子类,ObjectNode 可以在任何使用了JsonNode之处使用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自:https://www.ibm.com/developerworks/cn/java/jackson-ad...
    酱紫_Johns阅读 1,571评论 0 4
  • 老版本的 Jackson 使用的包名为 org.codehaus.jackson,而新版本使用的是 com.fas...
    acc8226阅读 8,142评论 0 0
  • jackson是java中最常用的json处理工具包之一,其他类似功能的包括gson和fastjson等。本文将简...
    DizzyDwarf阅读 2,131评论 0 0
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,281评论 2 7