你还不知道json和对象之间怎么转换吗?(ObjectMapper的使用详解)

ObjectMapper的使用详解(json 类型和对象之间相互转换的工具)

Jackson ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是使用Jackson解析JSON最简单的方法。
Jackson ObjectMapper可以从字符串、流或文件解析JSON,并创建Java对象或对象图来表示已解析的JSON。
将JSON解析为Java对象也称为从JSON反序列化Java对象,Jackson ObjectMapper也可以从Java对象创建JSON.
从Java对象生成JSON的过程也被称为序列化Java对象到JSON
Jackson对象映射器(ObjectMapper)可以把JSON解析为用户自定义类对象, 或者解析为JSON内置的树模型的对象。

一、 ObjectMapper的使用

1、引入jar包

    com.fasterxml.jackson.core
    jackson-databind
    2.9.9

2、使用ObjectMapper 实现对象和json之间的相互转换
  • 先建一个实体类 User
public class User {
	private Integer id;
	private String username;
	private String password;
	private Date createTime; 

	public int getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + ", createTime=" + createTime + "]";
	}

}

(1) 把对象转化成json

  • 将实体类User转成json字符串对象,使用writeValueAsString()方法
    @Test
    public void omTest() {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User();
        user.setId(3);
        user.setCreateTime(new Date());
        user.setPassword("123456");
        user.setUsername("hengheng");
        try {
            //转换成json字符串
            System.out.println(mapper.writeValueAsString(user));
            System.out.println("***************");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //输出结果   {"id":3,"username":"hengheng","password":"123456","createTime":1594283850147}  ,这里有一个小小的问题,时间转换成了long类型的时间戳,而不是字符串,在下面我们会实现怎么将时间格式化成字符串
  • 通过IO流的方式保存到本地的.json文件中, writeValue()方法
 @Test
    public void omTest() {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User();
        user.setId(3);
        user.setCreateTime(new Date());
        user.setPassword("123456");
        user.setUsername("hengheng");
        try {
            //以文件流的方式保存到本地
            mapper.writeValue(new FileOutputStream("G://json.json"), user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
writeValue()还有几个重载的方法,
1writeValue(JsonGenerator g, Object value)
2writeValue(DataOutput out, Object value)等,  具体的用法和上一个一样,这里不做具体的展示了,有兴趣的可以自己手动实现一下
  • 转换成字节数组,使用writeValueAsBytes(Object value)方法
@Test
    public void omTest() {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User();
        user.setId(3);
        user.setCreateTime(new Date());
        user.setPassword("123456");
        user.setUsername("hengheng");
        try {
            //转换成字节数组
            System.out.println(mapper.writeValueAsBytes(user));
            System.out.println("***********");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

(2)把json转换成对象

  • 从json字符串中读取java对象
    ObjectMapper mapper = new ObjectMapper();
    String jsonStr = "{\"id\":3,\"username\":\"hengheng\",\"password\":\"123456\",\"createTime\":1594282475030}";
    try {
        System.out.println(mapper.readValue(jsonStr, User.class));
    } catch (IOException e) {
        e.printStackTrace();
    }
 //输出结果   User [id=3, username=hengheng, password=123456, createTime=Thu Jul 09 16:14:35 CST 2020]       
  • 从json文件中读取java 对象
    ObjectMapper mapper = new ObjectMapper();
    //String jsonStr = "{\"id\":3,\"username\":\"hengheng\",\"password\":\"123456\",\"createTime\":1594282475030}";
    try {
        System.out.println(mapper.readValue(new File("G://json.json"), User.class));
    } catch (IOException e) {
        e.printStackTrace();
    }
  • 从JSON数组字符串读取Java对象数组
String jsonArray = "[{\"brand\":\"ford\"}, {\"brand\":\"Fiat\"}]";
ObjectMapper objectMapper = new ObjectMapper();
Car[] cars2 = objectMapper.readValue(jsonArray, Car[].class);
还有几种读取方式,这里不一一列举,例如:从URL获取JSON数据读取Java对象,从Java InputStream获取JSON数据读取Java对象,从字节数组获取JSON数据读取Java对象,从JSON数组字符串读取Java List对象,从JSON字符串读取Java Map对象

(3)序列化时间

在上面的过程中,我们似乎发现了一点问题,就是Date类型的转换变成了时间戳,这显然不是我们想要的。
通过制定格式化的样式来转换时间。

@Test
    public void changeDate(){
        User user = new User();
        user.setId(3);
        user.setCreateTime(new Date());
        user.setPassword("123456");
        user.setUsername("hengheng");
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        ObjectMapper mapper = new ObjectMapper();
        mapper.setDateFormat(dateFormat);
        try {
            System.out.println(mapper.writeValueAsString(user));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
//输出结果   {"id":3,"username":"hengheng","password":"123456","createTime":"2020-07-09 04:52:06"},这时可以发现,时间已经被格式化了

你可能感兴趣的:(心得总结,json,java,json)