JSON 格式的字符串转Java对象的工具类。
package com.ten.util;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ten.vo.UserEntity;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
* @author LWG
* @data 2022/3/11
* Jackson从2.0开始改用新的包名fasterxml,1.x版本的包名是codehaus。除了包名不同,他们的Maven artifact id也不同。
*/
public class JacksonUtil {
private static ObjectMapper objectMapper = new ObjectMapper();
/**
* JSON字符串反序列化成Java对象
*
* @param json
* @return
*/
public static UserEntity databind(String json) {
UserEntity user = null;
try {
user = objectMapper.readValue(json, UserEntity.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return user;
}
/**
* Java对象序列化成JSON字符串
*
* @param user
* @return
*/
public static String custom(UserEntity user) {
String json = null;
try {
json = objectMapper.writeValueAsString(user);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
/**
* Jackson提供了JavaType,用来指明集合类型和泛型
*
* @param collectonClass
* @param elementClasses
* @return
*/
public static JavaType getCollectionType(Class<?> collectonClass, Class<?>... elementClasses) {
return objectMapper.getTypeFactory().constructParametricType(collectonClass, elementClasses);
}
/**
* 集合的反序列化
*
* @param jsonArray
* @return
*/
public static List<UserEntity> databinds(String jsonArray) {
JavaType type = getCollectionType(List.class, UserEntity.class);
List<UserEntity> list = null;
try {
list = objectMapper.readValue(jsonArray, type);
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
public static void main(String[] args) throws JsonProcessingException {
//JSON字符串反序列化成Java对象
String json = "{\"name\":\"Rain\",\"id\":4405,\"age\":28,\"createDate\":\"2022-03-10\"}";
UserEntity user = databind(json);
System.out.println(user.toString());
//Java对象序列化成JSON字符串
//UserEntity user = new UserEntity();
user.setId(10086L);
user.setName("Bob");
user.setAge(18);
user.setCreateDate(new Date());
System.out.println(custom(user));
//集合的反序列化和序列化
String jsonArray = "[{\"name\":\"Rain\",\"id\":4405,\"age\":28,\"createDate\":\"2018-01-25\"},"
+ "{\"name\":\"Jim\",\"id\":4406,\"age\":26,\"createDate\":\"2018-01-25\"}]";
List<UserEntity> userList = databinds(jsonArray);
for (UserEntity userEntity : userList) {
System.out.println(userEntity.toString());
}
//集合的序列化
System.out.println(objectMapper.writeValueAsString(userList));
}
}