zoukankan      html  css  js  c++  java
  • JsonUtil转换成json格式

    package com.amssy.core.util;

    import java.lang.reflect.Method;
    import java.math.BigDecimal;
    import java.sql.Timestamp;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;


    /**
     * 转化json数据*
     */
    public class JsonUtil {
     
      /**
      *
      * @param mapObject map转化list
      * @return
      */
     public static List changeMapToJsonTypeString(Map mapObject){
      List<Map> thirdLt = new ArrayList<Map>();
      Iterator<Map.Entry> tt = mapObject.entrySet().iterator();
        while (tt.hasNext()) {
         Map testMap = new HashMap();
         Map.Entry entry = tt.next();
         testMap.put("name", entry.getKey());
         testMap.put("value", entry.getValue());
         thirdLt.add(testMap);
      }
      return thirdLt;
     }
     
     public static String toJson(final Object o) 
        { 
            if (o == null) 
            { 
                return """"; 
            }
            if(o instanceof Date){
             return date2JSon(o);
            }
            if(o instanceof Timestamp){
             return timestamp2JSon(o);
            }
            if (o instanceof String ) //String 
            { 
                return string2Json((String) o); 
            }
            if( o instanceof Character){
             return string2Json( String.valueOf(o)); 
            }
            if (o instanceof Boolean) //Boolean 
            { 
                return boolean2Json((Boolean) o); 
            } 
            if (o instanceof BigDecimal) //Boolean 
            { 
             return bigDecimal2Json((BigDecimal) o); 
            } 
            if (o instanceof Number) //Number 
            { 
                return number2Json((Number) o); 
            } 
            if (o instanceof Map) //Map 
            { 
                return map2Json((Map<Object, Object>) o); 
            } 
            if (o instanceof Collection) //List  Set 
            { 
                return collection2Json((Collection) o); 
            } 
            if (o instanceof Object[]) //对象数组 
            { 
                return array2Json((Object[]) o); 
            } 
     
            if (o instanceof int[])//基本类型数组 
            { 
                return intArray2Json((int[]) o); 
            } 
            if (o instanceof boolean[])//基本类型数组 
            { 
                return booleanArray2Json((boolean[]) o); 
            } 
            if (o instanceof long[])//基本类型数组 
            { 
                return longArray2Json((long[]) o); 
            } 
            if (o instanceof float[])//基本类型数组 
            { 
                return floatArray2Json((float[]) o); 
            } 
            if (o instanceof double[])//基本类型数组 
            { 
                return doubleArray2Json((double[]) o); 
            } 
            if (o instanceof short[])//基本类型数组 
            { 
                return shortArray2Json((short[]) o); 
            } 
            if (o instanceof byte[])//基本类型数组 
            { 
                return byteArray2Json((byte[]) o); 
            } 
            if (o instanceof Object) //保底收尾对象 
            { 
                return object2Json(o); 
            } 
     
            throw new RuntimeException("不支持的类型: " + o.getClass().getName()); 
        } 
     
        private static String bigDecimal2Json(BigDecimal o) {
          o=o.setScale(2, BigDecimal.ROUND_HALF_UP);
          return """+String.valueOf(o)+"""; 
     }
     private static String timestamp2JSon(Object o) {
         if(null==o){
       return """";
      }
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      return """+formatter.format(o)+""";
     }
     private static String date2JSon(Object o) {
      if(null==o){
       return """";
      }
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      return """+formatter.format(o)+""";
     }
     /**
         * 将 String 对象编码为 JSON格式,只需处理好特殊字符
         * 
         * @param s
         *            String 对象
         * @return JSON格式
         */ 
        static String string2Json(final String s) 
        { 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('"'); 
            for (int i = 0; i < s.length(); i++) 
            { 
                final char c = s.charAt(i); 
                switch (c) 
                { 
                case '"': 
                    sb.append("\""); 
                    break; 
                case '\': 
                    sb.append("\\"); 
                    break; 
                case '/': 
                    sb.append("\/"); 
                    break; 
                case '': 
                    sb.append("\b"); 
                    break; 
                case 'f': 
                    sb.append("\f"); 
                    break; 
                case ' ': 
                    sb.append("\n"); 
                    break; 
                case ' ': 
                    sb.append("\r"); 
                    break; 
                case ' ': 
                    sb.append("\t"); 
                    break; 
                default: 
                    sb.append(c); 
                } 
            } 
            sb.append('"'); 
            return sb.toString(); 
        } 
     
        /**
         * 将 Number 表示为 JSON格式
         * 
         * @param number
         *            Number
         * @return JSON格式
         */ 
        static String number2Json(final Number number) 
        { 
            return """+number.toString()+"""; 
        } 
     
        /**
         * 将 Boolean 表示为 JSON格式
         * 
         * @param bool
         *            Boolean
         * @return JSON格式
         */ 
        static String boolean2Json(final Boolean bool) 
        { 
            return """+bool.toString()+"""; 
        } 
     
        /**
         * 将 Collection 编码为 JSON 格式 (List,Set)
         * 
         * @param c
         * @return
         */ 
        static String collection2Json(final Collection<Object> c) 
        { 
            final Object[] arrObj = c.toArray(); 
            return toJson(arrObj); 
        } 
     
        /**
         * 将 Map<String, Object> 编码为 JSON 格式
         * 
         * @param map
         * @return
         */ 
        static String map2Json(final Map<Object, Object> map) 
        { 
            if (map.isEmpty()) 
            { 
                return "{}"; 
            } 
            final StringBuilder sb = new StringBuilder();
            sb.append('{'); 
            final Set<Object> keys = map.keySet(); 
            for (final Object key : keys) 
            { 
                final Object value = map.get(key); 
                sb.append('"'); 
                sb.append(String.valueOf(key).toUpperCase()); //不能包含特殊字符 
                sb.append('"'); 
                sb.append(':'); 
                sb.append(toJson(value)); //循环引用的对象会引发无限递归 
                sb.append(','); 
            } 
            // 将最后的 ',' 变为 '}':  
            sb.setCharAt(sb.length() - 1, '}'); 
            return sb.toString(); 
        } 
     
        /**
         * 将数组编码为 JSON 格式
         * 
         * @param array
         *            数组
         * @return JSON 格式
         */ 
        static String array2Json(final Object[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder();
            sb.append('['); 
            for (final Object o : array) 
            { 
                sb.append(toJson(o)); 
                sb.append(','); 
            } 
            // 将最后添加的 ',' 变为 ']':  
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String intArray2Json(final int[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final int o : array) 
            { 
                sb.append("""+Integer.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String longArray2Json(final long[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final long o : array) 
            { 
                sb.append("""+Long.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String booleanArray2Json(final boolean[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final boolean o : array) 
            { 
                sb.append("""+Boolean.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String floatArray2Json(final float[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final float o : array) 
            { 
                sb.append("""+Float.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String doubleArray2Json(final double[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final double o : array) 
            { 
                sb.append("""+Double.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String shortArray2Json(final short[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final short o : array) 
            { 
                sb.append("""+Short.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        static String byteArray2Json(final byte[] array) 
        { 
            if (array.length == 0) 
            { 
                return "[]"; 
            } 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('['); 
            for (final byte o : array) 
            { 
                sb.append("""+Byte.toString(o)+"""); 
                sb.append(','); 
            } 
            // set last ',' to ']': 
            sb.setCharAt(sb.length() - 1, ']'); 
            return sb.toString(); 
        } 
     
        public static String object2Json(final Object bean) 
        { 
            //数据检查 
            if (bean == null) 
            { 
                return "{}"; 
            } 
            final Method[] methods = bean.getClass().getMethods(); //方法数组 
            final StringBuilder sb = new StringBuilder(); 
            sb.append('{'); 
     
            for (final Method method : methods) 
            { 
                try 
                { 
                    final String name = method.getName(); 
                    String key = ""; 
                    if (name.startsWith("get")) 
                    { 
                        key = name.substring(3); 
     
                        //防死循环 
                        final String[] arrs = 
                        { "Class" }; 
                        boolean bl = false; 
                        for (final String s : arrs) 
                        { 
                            if (s.equals(key)) 
                            { 
                                bl = true; 
                                continue; 
                            } 
                        } 
                        if (bl) 
                        { 
                            continue; //防死循环 
                        } 
                    } 
                    else if (name.startsWith("is")) 
                    { 
                        key = name.substring(2); 
                    } 
                    if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0) 
                    { 
                        if (key.length() == 1) 
                        { 
                            key = key.toLowerCase(); 
                        } 
                        else if (!Character.isUpperCase(key.charAt(1))) 
                        { 
                            key = key.substring(0, 1).toLowerCase() + key.substring(1); 
                        } 
                        final Object elementObj = method.invoke(bean); 
     
                        //System.out.println("###" + key + ":" + elementObj.toString()); 
     
                        sb.append('"'); 
                        sb.append(key.toUpperCase()); //不能包含特殊字符 
                        sb.append('"'); 
                        sb.append(':'); 
                        sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归 
                        sb.append(','); 
                    } 
                } 
                catch (final Exception e) 
                { 
                    //e.getMessage(); 
                    throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e); 
                } 
            } 
            if (sb.length() == 1) 
            { 
                return bean.toString(); 
            } 
            else 
            { 
                sb.setCharAt(sb.length() - 1, '}'); 
                return sb.toString(); 
            } 
        }  
    }

    路漫漫其修远兮,吾将上下而求索
  • 相关阅读:
    django权限管理(Permission)
    记一次sentry部署过程
    Virtualbox+Vagrant环境准备
    jquery操作select(取值,设置选中)
    mysql 5.7主从安装和配置
    vue环境安装
    python 打印堆栈信息方法
    python3模块: os
    mysql查询语句(mysql学习笔记七)
    mysql存储引擎(mysql学习六)
  • 原文地址:https://www.cnblogs.com/IT-WJ/p/3607638.html
Copyright © 2011-2022 走看看