jackson包提供了java對象與json相互轉換的API。java
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); } } }