Jackson-JSON树模型

Jackson可以把JSON数据在内存中构建成为一个叫JsonNode的树模型对象。是最灵活的方法。它类似于XML的DOM解析器。

1 创建JSON树模型

读取JSON后,ObjectMapper提供指向树的根节点的指针。根节点可用于遍历整个树。下面代码展示了如何获取JSON字符串的根节点:

//创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();	
String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
//使用JSON构建JsonNode树对象
JsonNode rootNode = mapper.readTree(jsonString);

2 遍历树模型的语法

在遍历树并处理数据时,使用到根节点的相对路径获取每个节点。以下代码片段展示了如何遍历树。

JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.textValue());
 
JsonNode marksNode = rootNode.path("marks");
Iterator<JsonNode> iterator = marksNode.elements();

3 遍历树模型的示例

3.1 编写核心类

MainApp:

package com.yiidian.jackson;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.Iterator;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class MainApp {

    public static void main(String args[]){
        try {
            ObjectMapper mapper = new ObjectMapper();
            String jsonString = "{\"name\":\"eric\",  \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
            JsonNode rootNode = mapper.readTree(jsonString);

            JsonNode nameNode = rootNode.path("name");
            System.out.println("Name: "+ nameNode.textValue());

            JsonNode ageNode = rootNode.path("age");
            System.out.println("Age: " + ageNode.intValue());

            JsonNode verifiedNode = rootNode.path("verified");
            System.out.println("Verified: " + (verifiedNode.booleanValue() ? "Yes":"No"));

            JsonNode marksNode = rootNode.path("marks");
            Iterator<JsonNode> iterator = marksNode.elements();
            System.out.print("Marks: [ ");

            while (iterator.hasNext()) {
                JsonNode marks = iterator.next();
                System.out.print(marks.intValue() + " ");
            }

            System.out.println("]");
        }
        catch (JsonParseException e) {
            e.printStackTrace();
        }
        catch (JsonMappingException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

}

3.2 运行测试

推荐好课