1. 程式人生 > >【Springboot】Json轉換工具

【Springboot】Json轉換工具

HttpClient請求資料後是json字串,需要我們自己把Json字串反序列化為物件,我們會使用JacksonJson工具來實現。

JacksonJson是SpringMVC內建的json處理工具,其中有一個ObjectMapper類,可以方便的實現對json的處理:

1.物件轉json

import com.fasterxml.jackson.databind.ObjectMapper;
import com.leyou.httpdemo.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.IOException; @RunWith(SpringRunner.class) @SpringBootTest public class JacksonJsonTests { // json處理工具 private ObjectMapper mapper = new ObjectMapper(); @Test
public void tetsJson() throws IOException{ User user = new User(); user.setId(3L); user.setAge(23); user.setName("小明"); user.setUserName("xiaoming"); //序列化 String json = mapper.writeValueAsString(user); System.out.println("json = " +
json); } }

結果:
在這裡插入圖片描述

2.json轉普通物件

	// json處理工具
	private ObjectMapper mapper = new ObjectMapper();
	
    @Test
    public void tetsJsonToObject() throws IOException{
        User user = new User();
        user.setId(3L);
        user.setAge(23);
        user.setName("小明");
        user.setUserName("xiaoming");

        //序列化
        String json = mapper.writeValueAsString(user);
        System.out.println("json = " + json);

        // 反序列化
        final User result = mapper.readValue(json, User.class);
        System.out.println("result = " + result);
    }

結果:
在這裡插入圖片描述

3.json轉集合

json轉集合比較麻煩,因為你無法同時把集合的class和元素的class同時傳遞到一個引數。

因此Jackson做了一個型別工廠,用來解決這個問題:

	// json處理工具
	private ObjectMapper mapper = new ObjectMapper();
	
    @Test
    public void tetsJsonToList() throws IOException{
        User user = new User();
        user.setId(3L);
        user.setAge(23);
        user.setName("小明");
        user.setUserName("xiaoming");

        //序列化得到物件集合的字串
        String json = mapper.writeValueAsString(Arrays.asList(user, user));

        // 反序列化
        List<User> users = mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, User.class));
        for (User u : users){
            System.out.println("u = " + u);
        }
    }

結果:
在這裡插入圖片描述

3.json轉任意複雜型別

當物件泛型關係複雜時,型別工廠也不好使了。這個時候Jackson提供了TypeReference來接收型別泛型,然後底層通過反射來獲取泛型上的具體型別。實現資料轉換。

    @Test
    public void tetsJsonToList() throws IOException{
        User user = new User();
        user.setId(3L);
        user.setAge(23);
        user.setName("小明");
        user.setUserName("xiaoming");

        //序列化得到物件集合的字串
        String json = mapper.writeValueAsString(Arrays.asList(user, user));

        // 反序列化,接收兩個引數:json資料,反序列化的目標類位元組碼
        List<User> users = mapper.readValue(json, new TypeReference<List<User>>(){});
        for (User u : users){
            System.out.println("u = " + u);
        }
    }

結果:
在這裡插入圖片描述