欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java to json,javajson,import java.

来源: javaer 分享于  点击 40170 次 点评:26

java to json,javajson,import java.


import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;@SuppressWarnings("rawtypes")public class JsonUtil {    /** 增加需要额外处理的对象toString */    public Map<Class,JsonCastable> jsonCast = new HashMap<Class, JsonCastable>();    /**     * 根据参数类型 路由 获取 返回值字符串     * @param o 待操作参数可以是 String:将直接进行特殊字符的replace; Number或者boolean:直接输出; 否则调用toJson     * @return {String} json字符串     */    @SuppressWarnings("unchecked")    public String toJson(Object o){        if(null == o){            return null;        }else if(jsonCast.containsKey(o.getClass())){            return toJson( jsonCast.get(o.getClass()).cast(o) );        }else if(o instanceof String){            return "\\"" + ((String)o).replaceAll("\\"", "\\\\\\\\\\"").replaceAll("[\\n\\r]", "\\\\\\\\n").replaceAll("[\\\\s]+", " ") + "\\"";    // ① 双引号 replaceTo \\" ; ②换行 replaceTo \\n; ③多个空白 replaceTo 1个        }else if(o instanceof Number || o instanceof Boolean){            return o.toString();        }else if( o instanceof Iterable ){            return listToJson((Iterable<Object>) o);        }else if( o instanceof Object[] ){            return arrayToJson((Object[]) o);        }else if( o instanceof Map){            return mapToJson((Map<Object, Object>) o);        }else{            return ( o instanceof NeedToJson ) ? toJson(toMap(o)) : toJson(o.toString());   // NeedToJson 用来标示 在递归展开的时候需要展现的对象        }    }    /**     * 处理Map型数据     * @param m     * @return     */    private String mapToJson(Map<Object,Object> m){        StringBuffer sb = new StringBuffer();        sb.append("{");        for (Map.Entry<Object, Object> e : m.entrySet()) {            String key = e.getKey().toString().replaceAll("[\\\\W]", "");            if(key.length()>0 && key.charAt(0)>='0' && key.charAt(0) <= '9'){                throw new RuntimeException("json-key不要以数字开头");            }            sb.append("\\"" + key + "\\":");            sb.append(toJson(e.getValue()));            sb.append(",");        }        if( sb.lastIndexOf(",") == sb.length()-1 ){            sb.deleteCharAt(sb.length()-1);        }        sb.append("}");        return sb.toString();    }    /**     * 处理集合型数据     * @param list     * @return     */    private String listToJson(Iterable<Object> list){        StringBuffer sb = new StringBuffer();        sb.append("[");        for (Object o : list) {            sb.append( toJson(o) );            sb.append(",");        }        if( sb.lastIndexOf(",") == sb.length()-1 ){            sb.deleteCharAt(sb.length()-1);        }        sb.append("]");        return sb.toString();    }    /**     * 处理数组型数据     * @param list     * @return     */    private String arrayToJson(Object[] list){        StringBuffer sb = new StringBuffer();        sb.append("[");        for (Object o : list) {            sb.append( toJson(o) );            sb.append(",");        }        if( sb.lastIndexOf(",") == sb.length()-1 ){            sb.deleteCharAt(sb.length()-1);        }        sb.append("]");        return sb.toString();    }    /**     * 对象转换为 Map   根据field的get方法     * @param o   不得为null     * @return     */    public Map<String, Object> toMap(Object o){        Map<String, Object> map = new HashMap<String, Object>();        Class<?> clazz = o.getClass();        Field[] fields = clazz.getDeclaredFields();        for (Field field : fields) {            String s = field.getName();            Class<?> c = field.getType();            String methodName = ( Boolean.TYPE.equals(c)  ? "is" : "get") +s.substring(0,1).toUpperCase()+s.substring(1);            try {                Method method = clazz.getMethod(methodName);                Object result = method.invoke(o);                map.put(s,result);            } catch (Exception e) {            }        }        return map;    }    /**     * 仅用作标记是否对普通java对象根据field的get方法toMap 然后再 toJSON     */    public interface NeedToJson{}    /** 增加需要额外处理的对象toString */    public interface JsonCastable<T>{        String cast(T o);    }}/****************************************************华丽丽的分界线*************************************************************/public class Person implements JsonUtil.NeedToJson{    private String name = "shy2850";    private Integer age = 1002002939;    private Date birth = new Date();    private Boolean male = false;    private Person[] friends;    private double amt = 017827038920843099384920934892d;    private byte b = 24;    private char c = 'n';    private BigDecimal bd = new BigDecimal(142424232353.83838d);    /**getFuns**/}public class Test {    public static void main(String[] args) {        JsonUtil util = new JsonUtil();        util.jsonCast.put(Date.class, new JsonCastable<Date>() {            public String cast(Date o) {                return null == o ? null : new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(o);            }        });        Person person = new Person();        String result = util.toJson(person);        System.out.println(result);    }}//该片段来自于http://byrx.net
相关栏目:

用户点评