【Springboot】Json转换工具

版权声明:整理不易,转载请注明出处。 https://blog.csdn.net/linmengmeng_1314/article/details/85035252

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);
        }
    }

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/linmengmeng_1314/article/details/85035252