总结的一些json格式和对象/String/Map/List等的互转工具类
原文:总结的一些json格式和对象/String/Map/List等的互转工具类
源代码下载地址:http://www.zuidaima.com/share/1550463691508736.htm
总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar、jackson-jaxrs-1.7.1.jar、jackson-mapper-asl-1.7.1.jar这三个jar包
package com.zuidaima.util.json; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.codehaus.jackson.map.type.TypeFactory; public class JsonUtil { private static ObjectMapper mapper = new ObjectMapper(); static{ /** * 反序列化时忽略多余的属性 */ mapper.getDeserializationConfig().set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); /** * 忽略Null的值,节省空间. * @author www.zuidaima.com */ mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL); /** * 忽略Default值木有变化的属性,更节省空间,用于接收方有相同的Class * 如int属性初始值为0,那么这个属性将不会被序列化 */ mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT); } /** * * @Title: isJSON * @author kaka * @Description: 判断 jsonString是否可以转换成json格式 * @param @param jsonString * @param @return * @return boolean * @throws */ public static boolean isJSON(String jsonString) { return mapper.canSerialize(HashMap.class); } public static <V> Map<String, V> toMap(String content,Class<? extends V> clazz) throws Exception { return mapper.readValue(content, TypeFactory.mapType(HashMap.class,String.class, clazz)); } public static <V> Map<String, V> toMap(InputStream is,Class<? extends V> clazz) throws Exception { return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz)); } public static <V> Map<String, V> toMap(Reader is, Class<? extends V> clazz)throws Exception { return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz)); } public static <V> Map<String, V> toMap(URL is, Class<? extends V> clazz)throws Exception { return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz)); } public static <E> List<E> toList(String content, Class<? extends E> clazz)throws Exception { return jsonToList(content, clazz); } /** * * @Title: jsonToList * @author kaka * @Description: json转list , List的元素类型,会一并转换完成 如List<User> * @param @param <E> * @param @param content * @param @param clazz * @param @return 元素类型为E的List * @param @throws Exception * @return List<E> * @throws */ public static <E> List<E> jsonToList(String content,Class<? extends E> clazz) throws Exception { return mapper.readValue(content, TypeFactory.collectionType(ArrayList.class, clazz)); } /** * * @Title: jsonToIntArray * @author kaka * @Description: json转整形数组 * @param @param content * @param @return * @param @throws Exception * @return Integer[] * @throws */ public static Integer[] jsonToIntArray(String content) throws Exception { return jsonToArray(content, Integer.class); } public static Integer[] jsonToIntArray(String content,String key) throws Exception { return jsonToArray(content, key, Integer.class); } /** * * @Title: jsonToArray * @author kaka * @Description: json转对象数组 * @param @param <E> * @param @param content * @param @param clazz 数组中的对象类型 * @param @return E类型的数组,如User[] * @param @throws Exception * @return E[] * @throws */ public static <E> E[] jsonToArray(String content, Class<? extends E> clazz)throws Exception { if(content != null){ return mapper.readValue(content, TypeFactory.arrayType(clazz)); }else{ return null; } } /** * * @Title: fromJsonToObject * @author kaka * @Description: json转java对象,为兼容原util类 * @param @param <T> * @param @param content * @param @param clazz 目标类型 * @param @return * @param @throws Exception * @return T 返回类型为T的对象 * @throws */ public static <T> T fromJsonToObject(String content,Class<? extends T> clazz) throws Exception { return jsonToObject(content, clazz); } public static <T> T jsonToObject(String content, Class<? extends T> clazz)throws Exception { return mapper.readValue(content, clazz); } /** * * @Title: jsonToObject * @author kaka * @Description: 一个jsonStr包含多个java对象,取其中一个转化为java对象的方法 * @param @param <T> * @param @param content json格式的字符串 * @param @param key 要转换的子json串的key * @param @param clazz 目标类型 * @param @return 返回类型为T的对象 * @param @throws Exception * @return T * @throws */ public static <T> T jsonToObject(String content, String key,Class<? extends T> clazz) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return jsonToObject(path.toString(), clazz); }else{ return null; } } public static Integer getInt(String content, String key) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return jsonToObject(path.toString(), Integer.class); }else{ return null; } } public static String getString(String content, String key) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return jsonToObject(rootNode.path(key).toString(), String.class); }else{ return null; } } public static Date getDate(String content, String key) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return jsonToObject(path.toString(), Date.class); }else{ return null; } } /** * 一个jsonStr包含多个java对象,将指定的key的json转化为对象数组的方法 * @param content 原始的json串 * @param key 要转换的部分 * @param clazz 目标类型 * @return 目标类型的对象数组 * @throws Exception */ public static <E> E[] jsonToArray(String content, String key,Class<? extends E> clazz) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return jsonToArray(rootNode.path(key).toString(), clazz); }else{ return null; } } public static Integer[] jsonToArray(String content, String key) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return jsonToArray(path.toString(), Integer.class); }else{ return null; } } /** * * @Title: jsonToList * @author kaka * @Description: 一个jsonStr包含多个java对象,将指定的key的json转化为List<E>的方法 * @param @param <E> * @param @param content 原始的json串 * @param @param key 要转换的那部分json * @param @param clazz 目标类型 * @param @return 元素为目标类型的List * @param @throws Exception * @return List<E> * @throws */ public static <E> List<E> jsonToList(String content, String key,Class<? extends E> clazz) throws Exception { JsonNode rootNode = mapper.readValue(content, JsonNode.class); JsonNode path = rootNode.path(key); if(!path.isMissingNode()){ return toList(path.toString(), clazz); }else{ return null; } } /** * * @Title: toJson * @author kaka * @Description: 对象转化成json,已知问题 A a B b b中有a,a中有b , 如果a和b同在一个o中将不能正常转化 * @param @param o 要转换的对象 * @param @return json格式的字符串 * @param @throws Exception * @return String * @throws */ public static String toJson(Object o) throws Exception { return mapper.writeValueAsString(o); } /** * * @Title: toJson * @author kaka * @Description: 转换成json串到out * @param @param out * @param @param o * @param @throws Exception * @return void * @throws */ public static void toJson(OutputStream out, Object o) throws Exception { mapper.writeValue(out, o); } /** * * @Title: toJson * @author kaka * @Description: 转换成json串到writer * @param @param out * @param @param o * @param @throws Exception * @return void * @throws */ public static void toJson(Writer out, Object o) throws Exception { mapper.writeValue(out, o); } public static String map2Json(Map map) throws Exception{ return toJson(map); } /** * * @Title: formatJson * @author kaka * @Description: json字符串的格式化 * @param @param json * @param @param fillStringUnit * @param @return * @return String * @throws */ public static String formatJson(String json, String fillStringUnit) { if (json == null || json.trim().length() == 0) { return null; } int fixedLenth = 0; ArrayList<String> tokenList = new ArrayList<String>(); { String jsonTemp = json; //预读取 while (jsonTemp.length() > 0) { String token = getToken(jsonTemp); jsonTemp = jsonTemp.substring(token.length()); token = token.trim(); tokenList.add(token); } } for (int i = 0; i < tokenList.size(); i++) { String token = tokenList.get(i); int length = token.getBytes().length; if (length > fixedLenth && i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) { fixedLenth = length; } } StringBuilder buf = new StringBuilder(); int count = 0; for (int i = 0; i < tokenList.size(); i++) { String token = tokenList.get(i); if (token.equals(",")) { buf.append(token); doFill(buf, count, fillStringUnit); continue; } if (token.equals(":")) { buf.append(" ").append(token).append(" "); continue; } if (token.equals("{")) { String nextToken = tokenList.get(i + 1); if (nextToken.equals("}")) { i++; buf.append("{ }"); } else { count++; buf.append(token); doFill(buf, count, fillStringUnit); } continue; } if (token.equals("}")) { count--; doFill(buf, count, fillStringUnit); buf.append(token); continue; } if (token.equals("[")) { String nextToken = tokenList.get(i + 1); if (nextToken.equals("]")) { i++; buf.append("[ ]"); } else { count++; buf.append(token); doFill(buf, count, fillStringUnit); } continue; } if (token.equals("]")) { count--; doFill(buf, count, fillStringUnit); buf.append(token); continue; } buf.append(token); //左对齐 if (i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) { int fillLength = fixedLenth - token.getBytes().length; if (fillLength > 0) { for(int j = 0; j < fillLength; j++) { buf.append(" "); } } } } return buf.toString(); } private static String getToken(String json) { StringBuilder buf = new StringBuilder(); boolean isInYinHao = false; while (json.length() > 0) { String token = json.substring(0, 1); json = json.substring(1); if (!isInYinHao && (token.equals(":") || token.equals("{") || token.equals("}") || token.equals("[") || token.equals("]") || token.equals(","))) { if (buf.toString().trim().length() == 0) { buf.append(token); } break; } if (token.equals("\\")) { buf.append(token); buf.append(json.substring(0, 1)); json = json.substring(1); continue; } if (token.equals("\"")) { buf.append(token); if (isInYinHao) { break; } else { isInYinHao = true; continue; } } buf.append(token); } return buf.toString(); } private static void doFill(StringBuilder buf, int count, String fillStringUnit) { buf.append("\n"); for (int i = 0; i < count; i++) { buf.append(fillStringUnit); } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。