深入了解 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 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> fields = jsonNode.fields();
        System.out.println("\njsonNode.fields(): " + fields);
        System.out.print("\njsonNode.fields().foreach: {");
        while (fields.hasNext()) {
            Map.Entry 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 <- BaseJsonNode <- JsonNode
JsonNode 是一个只读抽象类,不能直接构建 JsonNode 实例的对象图,需要创建 JsonNode 的子类ObjectNode 实例的对象图。作为 JsonNode 的子类,ObjectNode 可以在任何使用了JsonNode之处使用。

你可能感兴趣的:(深入了解 Jackson 之 JsonNode)