jackson序列化和反序列化Json

jackson包提供了java對象與json相互轉換的API。java

jackson轉換機制

Jackson要求java對象是一個POJO對象,即它是一個普通JavaBean對象。此外,若是字段是用private修飾的,則必須有getXXX()方法,不然字段用public修飾。json

json常見格式以下數組

{
    "key1" : value,
    "key2" : [...],
    "key3" : {...}
}

jackson把JavaBean對象的每一個字段映射爲json的鍵,json鍵值由JavaBean的getXXX()方法肯定。app

json鍵值從形式上看,能夠分爲基本類型(字符串、數值)、數組、字典。當JavaBean的字段聲明爲基本類型時對應json的基本類型,當JavaBean聲明爲數組或鏈表時對應json的數組類型,當JavaBean聲明爲字典或對象時對應json的字典類型。this

序列化

定義一個符合JavaBean規則的類code

package com.weixia.Json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Bean {
    private String name;
    
    private int[] stature;
    
    private Friend friend;
    
    private ArrayList<String> song;
    
    private Map<String,Integer> score = new HashMap<String,Integer>();
    
    public Bean(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
    
    public void setStature(int[] stature) {
        this.stature = stature;
    }
    
    public int[] getStature() {
        return this.stature;
    }
    
    public void setSong(ArrayList<String> song) {
        this.song = song;
    }
    
    public ArrayList<String> getSong() {
        return this.song;
    }
    
    public void setFriend(Friend friend) {
        this.friend = friend;
    }
    
    public Friend getFriend() {
        return this.friend;
    }
    
    public void addScore(String subject,Integer score) {
        this.score.put(subject, score);
    }
    
    public Map getScore() {
        return this.score;
    }
}


class Friend {
    public String name;
    public int age;
}

將Bean對象序列化爲json以下xml

package com.weixia.Json;

import java.util.ArrayList;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

public class App 
{
    public static void main( String[] args ) throws Exception
    {
        Bean bean = new Bean("Album");
        ObjectMapper mapper = new ObjectMapper();
        
        bean.setStature(new int[] {88,60,89});
        
        ArrayList<String> song = new ArrayList<String>();
        song.add("奇異恩典");
        song.add("東京的都");
        bean.setSong(song);
        
        Friend friend = new Friend();
        friend.name = "小明";
        friend.age = 24;
        bean.setFriend(friend);
        
        bean.addScore("Math", 100);
        bean.addScore("PE", 88);
        
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true); //格式化輸出
        mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); //鍵按天然順序輸出
        mapper.setSerializationInclusion(Include.NON_EMPTY);    //忽略POJO中屬性爲空的字段
        mapper.writeValue(System.out, bean);
    }
}

反序列化

json文件以下:對象

{
    "name": "weixia",
    "age": 24,
    "stature":[89,66,89],
    "friend":{
        "name":"zhiye",
        "age":24
    },
    "test":""
}

定義一個符合JaveBean規則的類字符串

package com.weixia.Json;

public class People {
    private String name;
    private int age;
    private Friend friend;
    private int[] stature;
    public String getName() {
        return this.name;
    }
    
    public int getAge() {
        return this.age;
    }
    
    public Friend getFriend() {
        return this.friend;
    }
    
    public int[] getStature() {
        return this.stature;
    }
}


class Friend {
    public String name;
    public int age;
}

將json反序列化爲java對象get

package com.weixia.Json;

import java.io.File;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Json2Bean {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //忽略未知的屬性
        People people = mapper.readValue(new File("F:\\test.json"), People.class);
        
        System.out.println(people.getName());
        System.out.println(people.getAge());
        System.out.println(people.getFriend());
        int[] stature = people.getStature();
        for (int num : stature) {
            System.out.println(num);
        }
    }

}
相關文章
相關標籤/搜索