首页 > 其他分享 >【Springboot】Json转换工具

【Springboot】Json转换工具

时间:2022-12-02 17:33:58浏览次数:47  
标签:mapper 转换 Springboot json Json User new 序列化 user

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

结果:
【Springboot】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);
    }

结果:
【Springboot】Json转换工具_Json格式转换_02

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

结果:
【Springboot】Json转换工具_spring_03

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

结果:
【Springboot】Json转换工具_json转对象_04

标签:mapper,转换,Springboot,json,Json,User,new,序列化,user
From: https://blog.51cto.com/linmengmeng/5907347

相关文章