JSON 解析工具的封装(Java)
一直想有一个属于自己的JSON工具,今天终于弄好了.....
1.添加pom依赖包
-
<!--json解析--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency>
2.JSONUtils.java
-
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; /** * Created by 杨永生 on 2017/4/26. */ public class JSONUtils { private final static ObjectMapper objectMapper = new ObjectMapper(); static { //去掉默认的时间戳格式 objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //设置为中国上海时区 objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); //空值不序列化 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //反序列化时,属性不存在的兼容处理 objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); //序列化时,日期的统一格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //单引号处理 objectMapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); } private JSONUtils() { } public static ObjectMapper getInstance() { return objectMapper; } /** * javaBean,list,array convert to json string */ public static String obj2json(Object obj){ try { return objectMapper.writeValueAsString(obj); }catch (Exception e){ e.printStackTrace(); } return ""; } public static <T> T obj2obj(Object obj, Class<T> clazz){ try { String str=obj2json(obj); return json2pojo(str,clazz); }catch (Exception e){ e.printStackTrace(); } return null; } /** * json string convert to javaBean */ public static <T> T json2pojo(String jsonStr, Class<T> clazz) { try { return objectMapper.readValue(jsonStr, clazz); }catch (Exception e){ e.printStackTrace(); } return null; } /** * json string convert to map */ public static <T> Map<String, Object> json2map(String jsonStr) throws Exception { return objectMapper.readValue(jsonStr, Map.class); } public static <T> T fromJson(TypeReference<T> tr,byte[] content){ T t=null; try { t = objectMapper.readValue(content,0, content.length, tr); } catch (IOException e) { e.printStackTrace(); } return t; } /** * json string convert to map with javaBean */ public static <T> Map<String, T> json2map(String jsonStr, Class<T> clazz) throws Exception { Map<String, Map<String, Object>> map = objectMapper.readValue(jsonStr, new TypeReference<Map<String, T>>() { }); Map<String, T> result = new HashMap<String, T>(); for (Map.Entry<String, Map<String, Object>> entry : map.entrySet()) { result.put(entry.getKey(), map2pojo(entry.getValue(), clazz)); } return result; } /** * json array string convert to list with javaBean */ public static <T> List<T> json2list(String jsonArrayStr, Class<T> clazz) throws Exception { List<Map<String, Object>> list = objectMapper.readValue(jsonArrayStr, new TypeReference<List<T>>() { }); List<T> result = new ArrayList<T>(); for (Map<String, Object> map : list) { result.add(map2pojo(map, clazz)); } return result; } /** * map convert to javaBean */ public static <T> T map2pojo(Map map, Class<T> clazz) { return objectMapper.convertValue(map, clazz); } }
3.示例:
Article article=JSONUtils.json2pojo(tempString, Article.class);