天天看點

Jackson、Gosn、FastJson基本使用

為什麼要使用json :

1. json格式好了解

2. json格式資料在多種語言中,比較容易處理。 使用java, javascript讀寫json格式的資料比較容易。

3. json格式資料他占用的空間下,在網絡中傳輸快, 使用者的體驗好。

處理json的工具庫: gson(google), fastjson(阿裡), jackson, json-lib…

本篇文章介紹jackson和gson的簡單使用方法

使用Jackson工具包

導入Jackson依賴

<!-- jackson依賴 -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.10.1</version>
</dependency>
           
// JSON 在 java 中的使用(使用jackson工具包)
public class TestJson {
    public static void main(String[] args) throws JsonProcessingException {
    	
    	// 1.将java對象轉為json格式  --- 序列化
        Province shanghai = new Province(10,"上海","滬","直轄市");
		
        // 建立ObjectMapper對象
        ObjectMapper mapper = new ObjectMapper();
        
        // 調用writeValueAsString(Object o) 将o對象轉為json格式的字元串傳回
        String json = mapper.writeValueAsString(shanghai);
        
        // 2. list集合轉json數組
        // 這個方法可以接受list集合或者map集合, 序列化成為json數組
        String json = mapper.writeValueAsString(list);
        System.out.println(json);

		// 3. 将json格式的字元串, 轉為Java對象, 反序列化
        // 都是ObjectMapper.read()的相關方法
        // 使用readValue(String json, Class<T> valueType) 傳回這個java對象
        Province p = mapper.readValue(json, Province.class);
        System.out.println(p);
        
        // 4. 将json格式的數組,反序列化回list集合
        List<Province> listPro = mapper.readValue(json, new TypeReference<List<Province>>() {});
        listPro.forEach(province -> System.out.println(province.toString()));
        
    }
}
           

使用gson工具包

導入gson依賴

<!-- gson依賴 -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
           
// JSON 在 java 中的使用(使用gson工具包)
        // 1. javaBean(java對象) 和 json 的互轉
        @Test
        public void test1(){
            Person person = new Person(1,"迪麗熱巴");
            // 建立 Gson 對象執行個體
            Gson gson = new Gson();
            
            // toJson 方法可以把 java 對象轉換成為 json 字元串
            String personJsonString = gson.toJson(person);
            System.out.println(personJsonString);
            
            // fromJson 把 json 字元串轉換回 Java 對象
            // 第一個參數是 json 字元串
            // 第二個參數是轉換回去的 Java 對象類型的位元組碼
            Person person1 = gson.fromJson(personJsonString, Person.class);
            System.out.println(person1);
        } 
        
        // 2. List 和 json 的互轉
        @Test
        public void test2() {
            List<Person> personList = new ArrayList<>();
            personList.add(new Person(1, "迪麗熱巴"));
            personList.add(new Person(2, "古力娜紮"));
            
            Gson gson = new Gson();
            // 把 List 轉換為 json 字元串
            String personListJsonString = gson.toJson(personList);
            System.out.println(personListJsonString);
            
            // 将 json 轉為 list
            List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
            System.out.println(list);
            Person person = list.get(0);
            System.out.println(person);
        }
        
        // 3. map 和 json 的互轉
        @Test
        public void test3(){
            Map<Integer,Person> personMap = new HashMap<>();
            personMap.put(1, new Person(1, "迪麗熱巴"));
            personMap.put(2, new Person(2, "馬爾紮哈"));
            
            Gson gson = new Gson();
            
            // 把 map 集合轉換成為 json 字元串
            String personMapJsonString = gson.toJson(personMap);
            System.out.println(personMapJsonString);
            
            // Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
            PersonMapType().getType());
            
            Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
                    TypeToken<HashMap<Integer,Person>>(){}.getType());
            System.out.println(personMap2);
            Person p = personMap2.get(1);
            System.out.println(p);
        }
           

使用fastjson工具包

導入fastjson依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>
           
序列化:
String jsonString = JSON.toJSONString(obj);

反序列化:
VO vo = JSON.parseObject("jsonString", VO.class);

泛型反序列化:

List<VO> list = JSON.parseObject("jsonString", new TypeReference<List<VO>>(){});

注意:VO必須有預設無參構造方法