美文网首页
深入了解 Jackson 之 JsonNode

深入了解 Jackson 之 JsonNode

作者: 天高s | 来源:发表于2021-06-09 23:50 被阅读0次

    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之处使用。

    相关文章

      网友评论

          本文标题:深入了解 Jackson 之 JsonNode

          本文链接:https://www.haomeiwen.com/subject/nmbyeltx.html