package li.util; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import li.model.Field; /** * 类型转换的工具类 * * @author li (limingwei@mail.com) * @version 0.1.7 (2012-05-08) */ public class ConvertUtil extends Convert { /** * 将数据对象或对象的集合或数组转换为json */ public static String toJson(Object target) { if (null == target) { return ""; } if (target instanceof Collection) {// 如果是集合,转换成数组处理 return toJson(((Collection) target).toArray()); } if (target.getClass().isArray()) {// 如果是数组 String json = "["; for (Object one : (Object[]) target) {// 处理每个对象 json += toJson(one) + ","; } return json.substring(0, json.length() - 1) + "]";// 返回 } String json = "{";// 处理单个对象 if (Verify.basicType(target.getClass())) {// 单个基本类型的数据 json += "\"" + target.getClass().getName() + "\":\"" + target + "\","; } else if (Map.class.isAssignableFrom(target.getClass())) {// 如果是Map Set<Entry> entries = ((Map) target).entrySet(); for (Entry<String, Object> entry : entries) {// Map的每个属性 json += "\"" + entry.getKey() + "\":\"" + entry.getValue() + "\","; } } else {// 不是Map,按照POJO处理 List<Field> fields = Field.list(target.getClass(), true); for (Field field : fields) {// POJO的每个属性 json += "\"" + field.name + "\":\"" + Reflect.get(target, field.name) + "\","; } } return json.substring(0, json.length() - 1) + "}"; } /** * 将json转换为数据对象的List */ public static <T> List<T> fromJson(Class<T> type, String json) { if (Verify.isEmpty(json)) { return Collections.EMPTY_LIST; } final String JSON_REGEX = "^.*}[]]{0,1},[\\[]{0,1}\\{.*$", JSON_SPLIT = "}[]]{0,1},[\\[]{0,1}\\{"; List<T> list = new ArrayList<T>(); if (Verify.regex(json, JSON_REGEX)) {// 处理多个对象 String[] array = json.split(JSON_SPLIT); for (String one : array) { list.addAll(fromJson(type, one)); // 这里递归调用 } return (List<T>) list;// 返回 } T one = Reflect.born(type);// 处理单个对象 String[] array = json.split(","); for (String field : array) { String[] strs = field.split(":"); String key = strs[0].substring(strs[0].indexOf('"') + 1, strs[0].lastIndexOf('"')); String value = strs[1].substring(strs[1].indexOf('"') + 1, strs[1].lastIndexOf('"')); Reflect.set(one, key, value);// 是否要验证空字符串和null } list.add(one); return list; } /** * 将一个字符串出现的HMTL元素进行转义 */ public static String escapeHtml(CharSequence cs) { if (null == cs) { return null; } StringBuilder sb = new StringBuilder(); char[] cas = cs.toString().toCharArray(); for (char c : cas) { if ('&' == c) { sb.append("&"); } else if ('<' == c) { sb.append("<"); } else if ('>' == c) { sb.append(">"); } else if ('\'' == c) { sb.append("'"); } else if ('"' == c) { sb.append("""); } else { sb.append(c); } } return sb.toString(); } }