Json解析工具Jackson(簡單應用)

概述
    Jackson庫(http://jackson.codehaus.org),是基於Java語言的開源json格式解析工具,整個庫(使用最新的2.2版本)包含3個jar包:
    jackson-core.jar——核心包(必須),提供基於「流模式」解析的API。
    jackson-databind——數據綁定包(可選),提供基於「對象綁定」和「樹模型」相關API。
    jackson-annotations——註解包(可選),提供註解功能。
Jackson的優點
    相對於Java json解析的其餘庫,諸如json-lib、gson包,Jackson具備如下優勢:
    1.功能全面,提供多種模式的json解析方式,「對象綁定」使用方便,利用註解包能爲咱們開發提供不少便利。
    2.性能較高,「流模式」的解析效率超過絕大多數相似的json包。
重要API
    核心包:JsonPaser(json流讀取),JsonGenerator(json流輸出)。
    數據綁定包:ObjectMapper(構建樹模式和對象綁定模式),JsonNode(樹節點)。
簡單例子
    在實際應用中,用的最多的是數據對象綁定的模式,即將一個對象序列化爲json字符串和將一串json字符串反序列化爲java對象或Map。java

Person類:json

複製代碼
public class Person {

    private String name;

    private Integer age;

    //必須的
    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
複製代碼

測試類app

複製代碼
/**
 * 示例自己很簡單,可是main方法中的寫法很值得借鑑
 * 重構的思想
 */
public class Demo {
    public static void main(String[] args) {

        //writeJsonObject();

        //readJsonObject();

        readJsonMap();
    }

    //直接寫入一個對象(序列化)
    public static void writeJsonObject() {
        ObjectMapper mapper = new ObjectMapper();
        Person person = new Person("nomouse", 25);
        try {
            mapper.writeValue(new File("c:/person.json"), person);
            String string = mapper.writeValueAsString(person);
            System.out.println(string);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 直接將一個json轉化爲對象(反序列化)
    public static void readJsonObject() {
        ObjectMapper mapper = new ObjectMapper();

        try {
            Person person = mapper.readValue(new File("c:/person.json"),
                    Person.class);
            System.out.println(person.getName() + ":" + person.getAge());
            String string = "{\"name\":\"nomouse\",\"age\":25}";
            //Person必須有無參構造方法
            Person person1 = mapper.readValue(string, Person.class);
            System.out.println(person1.getName() + ":" + person1.getAge());

        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 直接轉化爲map
    public static void readJsonMap() {
        ObjectMapper mapper = new ObjectMapper();

        try {
            // 須要注意的是這裏的Map實際爲一個LikedHashMap,即鏈式哈希表,能夠按照讀入順序遍歷
            Map map = mapper.readValue(new File("c:/person.json"), Map.class);
            System.out.println(map.get("name") + ":" + map.get("age"));
            String string = "{\"name\":\"nomouse\",\"age\":25}";
            //Person必須有無參構造方法
            Map map1 = mapper.readValue(string, Map.class);
            System.out.println(map1);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
複製代碼
相關文章
相關標籤/搜索