第一步:在pom.xml添加依赖包
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
第二步:写一个JsonUtil的类,如下:
package com.mmall.util;
import com.google.common.collect.Lists;
import com.mmall.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.type.JavaType;
import org.codehaus.jackson.type.TypeReference;
import java.text.SimpleDateFormat;
import java.util.List;
//直接放到项目中,适用性强
@Slf4j
public class JsonUtil {
private static ObjectMapper objectMapper=new ObjectMapper();
static {
//对象的所有字段全部例入
objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.ALWAYS);
//取消默认转换timestamps形式
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);
//忽略空bean转json的错误
objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
//所有的日期格式都统一为以下的格式,即为:yyyy-MM-dd HH:mm:ss
objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));
//忽略在json字符串存在,但在java对像中不存在对应属性的情况,防止错误
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
}
//对象转字符串
public static <T> String obj2String(T obj){
if(obj==null){
return null;
}
try {
return obj instanceof String ? (String)obj:objectMapper.writeValueAsString(obj);
} catch (Exception e) {
log.warn("Parse object to String error",e);
return null;
}
}
//返回格式化好的json字符串
public static <T> String obj2StringPretty(T obj){
if(obj==null){
return null;
}
try {
return obj instanceof String ? (String)obj:objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (Exception e) {
log.warn("Parse object to String error",e);
return null;
}
}
//把字符串转成对象,第一个T表示将此方法声明为泛型方法,Class<T> clazz表示反序列化为什么类型
public static <T> T string2Obj(String str,Class<T> clazz){
if(StringUtils.isEmpty(str)||clazz==null){
return null;
}
try {
return clazz.equals(String.class)?(T)str:objectMapper.readValue(str,clazz);
} catch (Exception e) {
log.warn("Parse object to Object error",e);
return null;
}
}
//方法一,实现String userListStr=JsonUtil.obj2String(userList);这种的反序列化[重点]用于复杂的场景
public static <T> T string2Obj(String str, TypeReference<T> typeReference){
if(StringUtils.isEmpty(str)||typeReference==null){
return null;
}
try {
return (T)(typeReference.getType().equals(String.class)?(T)str:objectMapper.readValue(str,typeReference));
} catch (Exception e) {
log.warn("Parse object to Object error",e);
return null;
}
}
//方法二,?表示还没有确定返回值[重点]用于复杂的场景
public static <T> T string2Obj(String str, Class<?> collectionClass,Class<?>... elementClass){
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClass);
try {
return objectMapper.readValue(str,javaType);
} catch (Exception e) {
log.warn("Parse object to Object error",e);
return null;
}
}
//使用主函数进行测试
public static void main(String[] args) {
User u1 =new User();
u1.setId(1);
u1.setPassword("12");
User u2 =new User();
u2.setId(2);
u2.setPassword("23");
String user1Json=JsonUtil.obj2String(u1);
String user1JsonPretty=JsonUtil.obj2StringPretty(u1);
log.info("user1Json:{}",user1Json);
log.info("user1JsonPretty:{}",user1JsonPretty);
User user = JsonUtil.string2Obj(user1Json,User.class);
List<User> userList = Lists.newArrayList();
userList.add(u1);
userList.add(u2);
String userListStr=JsonUtil.obj2String(userList);
log.info(userListStr);
//这是重点的方法
List<User> userListObj1=JsonUtil.string2Obj(userListStr, new TypeReference<List<User>>() {
});
//这是重点的方法
List<User> userList2=JsonUtil.string2Obj(userListStr,List.class,User.class);
}
}
fastjson介绍备注:
需要引入 fastjson-1.2.40.jar包
FastJson的介绍
JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架;
FastJson的特点
1.FastJson数度快,无论序列化和反序列化,都是当之无愧的fast
2.功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
3.零依赖(没有依赖其它任何类库);
FastJson的简单说明
FastJson对于json格式字符串的解析主要用到了下面三个类:
1.JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
2.JSONObject:fastJson提供的json对象
3.JSONArray:fastJson提供json数组对象;