這個一個json的工具類。用的是jackson,固然還有谷歌的gosn,阿里的fastjson ,可是jackson的感受仍是最成熟(網上大神說的。。。)java
實現的功能很簡單,對象轉字符串 字符串轉簡單對象 轉list<T>複雜對象 還包括時間格式化工具類 直接都能用。。。不用糾結原理咋實現!!!spring
先上依賴apache
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
<dependencies> <!--json格式化工具類--> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency> <!--時間工具類--> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.3</version> </dependency> <!--apache工具類--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> <!--加速開發的工具,能夠省略getset和日誌類,只須要註解就能夠--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.6</version> </dependency> <!--日誌相關--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.logback-extensions</groupId> <artifactId>logback-ext-spring</artifactId> <version>0.1.1</version> </dependency> </dependencies>
JsonUtil.java
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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.Inclusion; import org.codehaus.jackson.type.JavaType; import org.codehaus.jackson.type.TypeReference; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created by geely */ @Slf4j public class JsonUtil { private static ObjectMapper objectMapper = new ObjectMapper(); static{ //對象的全部字段所有列入 objectMapper.setSerializationInclusion(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); } //對象轉json字符串 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字符串 重載方法 格式化的jaon字符串 方便調試 實際開發取第一種方法 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; } } //json字符串轉對象轉 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 String to Object error",e); return null; } } //json字符串轉list<T>對象 和下面的同樣 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)? str : objectMapper.readValue(str,typeReference)); } catch (Exception e) { log.warn("Parse String to Object error",e); return null; } } //json字符串轉list<T>對象 和上面的同樣 public static <T> T string2Obj(String str,Class<?> collectionClass,Class<?>... elementClasses){ JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClasses); try { return objectMapper.readValue(str,javaType); } catch (Exception e) { log.warn("Parse String to Object error",e); return null; } } public static void main(String[] args) { User user = new User(); user.setAge(12); user.setId(1); user.setName("劉中華"); String s = JsonUtil.obj2String(user); System.out.println(s); System.out.println("----------------------------------"); //-------------------------------------- System.out.println(JsonUtil.string2Obj(s,User.class)); System.out.println("----------------------------------"); //-------------------------------------- ArrayList<User> users = new ArrayList<>(); users.add(new User(1,"a",1)); users.add(new User(2,"b",2)); users.add(new User(3,"c",3)); String s1 = JsonUtil.obj2String(users); System.out.println(s1); System.out.println("----------------------------------"); //-------------------------------------- System.out.println(JsonUtil.string2Obj(s1,new TypeReference<List<User>>(){})); System.out.println("----------------------------------"); //-------------------------------------- List<User> userListObj2 = JsonUtil.string2Obj(s1,List.class,User.class); System.out.println(userListObj2); } }
User.javajson
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; /** * Created by 敲代碼的卡卡羅特 * on 2018/4/6 15:59. */ @Data @ToString @AllArgsConstructor @NoArgsConstructor public class User { private Integer id; private String name; private Integer age; }
DateTimeUtil.java
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import java.util.Date; /** * Created by geely */ public class DateTimeUtil { //joda-time //str->Date //Date->str public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss"; //字符串轉日期 public static Date strToDate(String dateTimeStr,String formatStr){ DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr); DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr); return dateTime.toDate(); } //日期轉字符串 public static String dateToStr(Date date,String formatStr){ if(date == null){ return StringUtils.EMPTY; } DateTime dateTime = new DateTime(date); return dateTime.toString(formatStr); } //若是不寫格式,則取默認格式 public static Date strToDate(String dateTimeStr){ DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT); DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr); return dateTime.toDate(); } //若是不寫格式,則取默認格式 public static String dateToStr(Date date){ if(date == null){ return StringUtils.EMPTY; } DateTime dateTime = new DateTime(date); return dateTime.toString(STANDARD_FORMAT); } public static void main(String[] args) { System.out.println(DateTimeUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss")); System.out.println(DateTimeUtil.strToDate("2010-01-01 11:11:11","yyyy-MM-dd HH:mm:ss")); } }